ORACLE SQL 第二最高工资

kar*_*017 -1 sql oracle top-n

如何从员工表中查找员工领取的第二最高工资。是否可以通过ROWNUM函数查找。

示例表:

S.no    Name       employee_id     salary
201     Steven        100            1000
202     Alexander     101            2500 
203     Daniel        102            5000
204     John          103            3000
205     Ishanth       104            8000 
Run Code Online (Sandbox Code Playgroud)

Vas*_*ash 6

既然你提到了第二高的工资,你应该使用DENSE_RANK而不是ROW_NUMBER如果有两个员工具有相同的最高值,即使你给出了WHERE ROW_NUMBER = 2条件,这也会错误地给你最高的工资。

SELECT A.S_NO, A.NAME, A.EMPLOYEE_ID, A.SALARY
FROM
    (SELECT S_NO, NAME, EMPLOYEE_ID, SALARY, 
     DENSE_RANK() OVER (ORDER BY SALARY DESC) AS SALARY_RANK) A
WHERE A.SALARY_RANK = 2;
Run Code Online (Sandbox Code Playgroud)

  • 不知道为什么有人对此投反对票,这是一个非常好的答案。 (4认同)