sql >> Base de Datos >  >> RDS >> Oracle

La instrucción Rownum devuelve una fila diferente que sin ella

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;

Nota:

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