Il tuo problema è causato dal fatto che where
la clausola è applicata prima di order by
.
Puoi aggirare il problema ordinando prima e poi applicando 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;
Nota:
Questo problema è specifico di Oracle. MS SQL Server TOP
e MySQL LIMIT
vengono entrambi applicati dopo order by
clausola.
Nota 2:
In Oracle Database 12c ( 12.1), c'è una nuova funzionalità per selezionare le righe da k a k+m
, offset k rows fetch next m rows only
. Consiglierei di usarlo al posto della soluzione sopra. Grazie a Lalit Kumar B per averlo segnalato.
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
Ma cosa succede se ci sono due (o più) reparti con lo stesso numero? Non preoccuparti, esiste una variante che restituisce tutte le cravatte:
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