Вашият проблем е причинен от факта, че where
клаузата се прилага преди order by
.
Можете да заобиколите проблема, като първо сортирате и след това приложите 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;
Забележка:
Този проблем е специфичен за Oracle. MS SQL Server TOP
и MySQL LIMIT
и двете се прилагат след order by
клауза.
Бележка 2:
В Oracle Database 12c ( 12.1), има нова функция за избиране на редове от k до k+m
, offset k rows fetch next m rows only
. Бих препоръчал да го използвате вместо решението по-горе. Благодаря на Лалит Кумар Б, че го посочи.
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
Но какво ще стане, ако има два (или повече) отдела с еднакъв номер? Не се притеснявайте, има вариант, който връща всички връзки:
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