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

Hvordan kan jeg vælge posten med den 2. højeste løn i databasen Oracle?

RANK og DENSE_RANK er allerede blevet foreslået - afhængigt af dine krav kan du også overveje ROW_NUMBER():

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

Forskellen mellem RANK(), DENSE_RANK() og ROW_NUMBER() kan koges ned til:

  • ROW_NUMBER() genererer altid en unik rangering; hvis ORDER BY-sætningen ikke kan skelne mellem to rækker, vil den stadig give dem forskellige rangeringer (tilfældigt)
  • RANK() og DENSE_RANK() vil give den samme rangering til rækker, der ikke kan skelnes af ORDER BY-sætningen
  • DENSE_RANK() vil altid generere en sammenhængende rækkefølge (1,2,3,...), hvorimod RANK() vil efterlade huller efter to eller flere rækker med samme rang (tænk "Olympic Games":hvis to atleter vinder guldmedaljen, der er ingen andenplads, kun tredje)

Så hvis du kun vil have én medarbejder (selvom der er flere med den 2. højeste løn), vil jeg anbefale ROW_NUMBER().



  1. Oracle XMLTYPE-ekstrakt baseret på værdi og tilstand

  2. LIKE og NULL i WHERE-sætning i SQL

  3. Min doktrin er virkelig langsom. Enkel forespørgsel og et sekund for at få resultatet

  4. Sådan viser du samlingen af ​​din forbindelse i MySQL