Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak wybrać rekord z drugą najwyższą pensją w bazie danych Oracle?

RANK i DENSE_RANK zostały już zasugerowane - w zależności od wymagań możesz również rozważyć ROW_NUMBER():

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

Różnica między RANK(), DENSE_RANK() i ROW_NUMBER() sprowadza się do:

  • ROW_NUMBER() zawsze generuje unikalny ranking; jeśli klauzula ORDER BY nie może odróżnić dwóch wierszy, nadal da im różne rankingi (losowo)
  • RANK() i DENSE_RANK() dadzą ten sam ranking wierszom, których nie można rozróżnić za pomocą klauzuli ORDER BY
  • DENSE_RANK() zawsze wygeneruje ciągłą sekwencję rang (1,2,3,...), podczas gdy RANK() pozostawi luki po dwóch lub więcej wierszach o tej samej randze (pomyśl "Igrzyska Olimpijskie":jeśli dwóch zawodników zdobywa złoty medal, drugiego miejsca nie ma, tylko trzecie)

Tak więc, jeśli chcesz tylko jednego pracownika (nawet jeśli jest kilku z drugą najwyższą pensją), polecam ROW_NUMBER().



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Porównaj dwa schematy i zaktualizuj stary schemat o nowe kolumny nowego schematu

  2. Oracle SQL — REGEXP_LIKE zawiera znaki inne niż a-z lub A-Z

  3. OracleConnection zgłasza pusty wyjątek

  4. Spojrzenie na Oracle Group-by Bug

  5. SQL w kontra skrzyżowanie