Ditt problem orsakas av det faktum att where
klausul tillämpas före order by
.
Du kan komma runt problemet genom att först sortera och sedan använda 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;
Obs!
Det här problemet är Oracle-specifikt. MS SQL Server TOP
och MySQL LIMIT
tillämpas båda efter order by
klausul.
Obs 2:
I Oracle Database 12c ( 12.1) finns det en ny funktion för att välja rader k till k+m
, offset k rows fetch next m rows only
. Jag skulle rekommendera att använda den istället för lösningen ovan. Tack till Lalit Kumar B för att du påpekade 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 vad händer om det finns två (eller flera) avdelningar med samma nummer? Oroa dig inte, det finns en variant som returnerar alla band:
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