Oracle
 sql >> база данни >  >> RDS >> Oracle

Как мога да избера записа с 2-ра най-висока заплата в база данни Oracle?

RANK и DENSE_RANK вече са предложени - в зависимост от вашите изисквания може също да обмислите ROW_NUMBER():

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

Разликата между RANK(), DENSE_RANK() и ROW_NUMBER() се свежда до:

  • ROW_NUMBER() винаги генерира уникално класиране; ако клаузата ORDER BY не може да направи разлика между два реда, тя пак ще им даде различно класиране (на случаен принцип)
  • RANK() и DENSE_RANK() ще дадат еднакво класиране на редове, които не могат да бъдат разграничени от клаузата ORDER BY
  • DENSE_RANK() винаги ще генерира непрекъсната последователност от рангове (1,2,3,...), докато RANK() ще остави празнини след два или повече реда с еднакъв ранг (помислете за „Олимпийски игри“:ако двама спортисти печелят златния медал, няма второ място, само трето)

Така че, ако искате само един служител (дори ако има няколко с 2-ра най-висока заплата), бих препоръчал 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. Oracle JDBC DriverManager.getConnection() увисва

  2. Внедряване на OOPS в Oracle

  3. Как да извлечете група от регулярен израз в Oracle?

  4. AWS DMS с CDC. Записите за актуализиране включват само актуализираното поле. Как да включим всички?

  5. Как да извлечете данни от две колони във формат A,B в Oracle