Váš problém je způsoben tím, že where
klauzule se použije před order by
.
Problém můžete obejít tak, že nejprve seřadíte a poté použijete 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;
Poznámka:
Tento problém je specifický pro Oracle. MS SQL Server TOP
a MySQL LIMIT
oba se použijí po order by
doložka.
Poznámka 2:
V databázi Oracle 12c ( 12.1) je nová funkce pro výběr řádků k až k+m
, offset k rows fetch next m rows only
. Doporučil bych jej použít místo výše uvedeného řešení. Děkuji Lalit Kumar B za upozornění.
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
Ale co když existují dvě (nebo více) oddělení se stejným číslem? Nebojte se, existuje varianta, která vrátí všechny vazby:
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