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