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