Ihr Problem wird dadurch verursacht, dass der where
-Klausel wird vor order by
angewendet .
Sie können das Problem umgehen, indem Sie zuerst sortieren und dann rownum
anwenden :
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;
Hinweis:
Dieses Problem ist Oracle-spezifisch. MS SQL Server TOP
und MySQL LIMIT
werden beide nach order by
angewendet Klausel.
Anmerkung 2:
In Oracle Database 12c ( 12.1), gibt es eine neue Funktion zum Auswählen der Zeilen k bis k+m
, offset k rows fetch next m rows only
. Ich würde empfehlen, es anstelle der obigen Lösung zu verwenden. Danke an Lalit Kumar B für den Hinweis.
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
Aber was ist, wenn es zwei (oder mehr) Abteilungen mit derselben Nummer gibt? Keine Sorge, es gibt eine Variante, die alle Bindungen zurückgibt:
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