sql >> Database teknologi >  >> RDS >> Oracle

Rownum-sætning returnerer en anden række end uden

Dit problem er forårsaget af, at where klausul anvendes før order by .

Du kan omgå problemet ved først at sortere og derefter anvende rownum :

select * from (
    select deptno from emp 
     where job='CLERK' 
     group by deptno 
    having count(job)=(select min(count(job)) from emp where job='CLERK'group by deptno) 
     order by deptno) 
where rownum=1;

Bemærk:

Dette problem er Oracle-specifikt. MS SQL Server TOP og MySQL LIMIT anvendes begge efter order by klausul.

Bemærkning 2:

I Oracle Database 12c ( 12.1), er der en ny funktion til at vælge rækker k til k+m , offset k rows fetch next m rows only . Jeg vil anbefale at bruge det i stedet for løsningen ovenfor. Tak til Lalit Kumar B for at påpege det.

select deptno from emp 
 where job='CLERK' 
 group by deptno 
having count(job)=(select min(count(job)) from emp where job='CLERK'group by deptno) 
order by deptno
fetch next 1 rows only

Men hvad hvis der er to (eller flere) afdelinger med samme nummer? Bare rolig, der er en variant, der returnerer alle bånd:

select deptno from emp 
 where job='CLERK' 
 group by deptno 
having count(job)=(select min(count(job)) from emp where job='CLERK'group by deptno) 
order by deptno
fetch next 1 rows with ties


  1. Kald SSRS-rapporten i knapklik og skal have output som PDF-fil

  2. Kan jeg få en plpgsql-funktion til at returnere et heltal uden at bruge en variabel?

  3. forespørgsel efter brugerens rangering i en-til-mange tabeller

  4. mysql concat streng med resultat