Su problema se debe al hecho de que where
la cláusula se aplica antes de order by
.
Puede solucionar el problema ordenando primero y luego aplicando 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;
Este problema es específico de Oracle. MS SQL Server TOP
y MySQL LIMIT
ambos se aplican después del order by
cláusula.
Nota 2:
En Oracle Database 12c ( 12.1), hay una nueva función para seleccionar las filas k a k+m
, offset k rows fetch next m rows only
. Recomendaría usarlo en lugar de la solución anterior. Gracias a Lalit Kumar B por señalarlo.
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
Pero, ¿y si hay dos (o más) departamentos con el mismo número? No te preocupes, hay una variante que devuelve todos los empates:
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