首页 > 解决方案 > 第二高的薪水

问题描述

编写 SQL 查询以从 Employee 表中获取第二高的薪水。

    | Id | Salary |
    | 1  | 100    |
    | 2  | 200    |
    | 3  | 300    |

例如,给定上面的 Employee 表,查询应该返回 200 作为第二高的薪水。如果没有第二高的薪水,那么查询应该返回 null。

    | SecondHighestSalary |
    | 200                 |

这是来自 Leetcode 的一个问题,我为此输入了以下代码:

    SELECT CASE WHEN Salary = '' 
                THEN NULL
    ELSE Salary 
    END AS SecondHighestSalary 
    FROM (SELECT TOP 2 Salary
                ,ROW_NUMBER() OVER (ORDER BY Salary DESC) AS Num
          FROM Employee
          ORDER BY Salary DESC) AS T
    WHERE T.Num = 2

它表示如果没有第二高薪水的值,则查询不会返回 NULL。例如。如果表是

   | Id | Salary| 
   | 1  |  100  |

查询应该返回

   |SecondHighestSalary|
   |       null        |

并不是

   |SecondHighestSalary|
   |                   |

标签: sqlsql-serversql-server-2008sql-server-2012

解决方案


在平局的情况下,您需要第二高的不同值。例如,对于值 100、200、300、300,您需要 200。

所以得到最大值(MAX(salary)=> 300),然后得到小于那个的最大值:

select max(salary) from mytable where salary < (select max(salary) from mytable);

推荐阅读