Oracle
 sql >> Database >  >> RDS >> Oracle

Selezione della seconda riga di una tabella utilizzando rownum

Per spiegare questo comportamento, dobbiamo capire come Oracle elabora ROWNUM. Quando si assegna ROWNUM a una riga, Oracle parte da 1 e incrementa il valore solo quando viene selezionata una riga; cioè, quando tutte le condizioni nella clausola WHERE sono soddisfatte. Poiché la nostra condizione richiede che ROWNUM sia maggiore di 2, non viene selezionata alcuna riga e ROWNUM non viene mai incrementato oltre 1.

La conclusione è che condizioni come le seguenti funzioneranno come previsto.

.. WHERE rownum =1;

.. WHERE rownum <=10;

Mentre le query con queste condizioni restituiranno sempre zero righe.

.. DOVE rownum =2;

.. DOVE rownum> 10;

Citato da Understanding Oracle rownum

Dovresti modificare la tua query in questo modo per funzionare:

select empno
from
    (
    select empno, rownum as rn 
    from (
          select empno
          from emp
          order by sal desc
          )
    )
where rn=2;

MODIFICA :Ho corretto la query per ottenere il rownum dopo l'ordine per sal desc