sql >> Databáze >  >> RDS >> Oracle

Jak mohu vybrat záznam s 2. nejvyšším platem v databázi Oracle?

RANK a DENSE_RANK již byly navrženy – v závislosti na vašich požadavcích můžete zvážit také ROW_NUMBER():

select * from (
  select e.*, row_number() over (order by sal desc) rn from emp e
)
where rn = 2;

Rozdíl mezi RANK(), DENSE_RANK() a ROW_NUMBER() se scvrkává na:

  • ROW_NUMBER() vždy generuje jedinečné hodnocení; pokud klauzule ORDER BY nedokáže rozlišit mezi dvěma řádky, bude jim stále přidělovat různé pořadí (náhodně)
  • RANK() a DENSE_RANK() poskytnou stejné hodnocení řádkům, které nelze odlišit klauzulí ORDER BY
  • DENSE_RANK() vždy vygeneruje souvislou posloupnost hodnocení (1,2,3,...), zatímco RANK() ponechá mezery po dvou nebo více řádcích se stejnou pozicí (například „olympijské hry“:pokud dva sportovci získávají zlatou medaili, druhé místo není, pouze třetí)

Pokud tedy chcete pouze jednoho zaměstnance (i když jich je několik s 2. nejvyšším platem), doporučil bych ROW_NUMBER().



  1. Jak provést aktualizaci tabulky SQL Server CE z jiné tabulky

  2. Přidejte střídající se barvu řádku do sestavy SQL Server Reporting Services

  3. Najděte druhý nejvyšší záznam z Oracle db

  4. Zobrazit soubor uložený v databázi pomocí php v prohlížeči