Votre problème est causé par le fait que le where
la clause est appliquée avant order by
.
Vous pouvez contourner le problème en triant d'abord puis en appliquant 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;
Remarque :
Ce problème est spécifique à Oracle. MS SQL Server TOP
et MySQL LIMIT
sont tous deux appliqués après le order by
clause.
Remarque 2 :
Dans Oracle Database 12c ( 12.1), il y a une nouvelle fonctionnalité pour sélectionner les lignes k à k+m
, offset k rows fetch next m rows only
. Je recommanderais de l'utiliser à la place de la solution ci-dessus. Merci à Lalit Kumar B de l'avoir signalé.
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
Mais que se passe-t-il s'il y a deux départements (ou plus) avec le même numéro ? Ne vous inquiétez pas, il existe une variante qui renvoie tous les liens :
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