Uw probleem wordt veroorzaakt door het feit dat de where
clausule wordt toegepast vóór order by
.
U kunt het probleem omzeilen door eerst te sorteren en vervolgens rownum
. toe te passen :
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;
Opmerking:
Dit probleem is Oracle-specifiek. MS SQL Server TOP
en MySQL LIMIT
worden beide toegepast na de order by
clausule.
Opmerking 2:
In Oracle Database 12c ( 12.1), is er een nieuwe functie voor het selecteren van rijen k tot en met k+m
, offset k rows fetch next m rows only
. Ik zou aanraden om het te gebruiken in plaats van de bovenstaande oplossing. Met dank aan Lalit Kumar B voor het erop wijzen.
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
Maar wat als er twee (of meer) afdelingen zijn met hetzelfde nummer? Maak je geen zorgen, er is een variant die alle banden retourneert:
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