编写一个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|
   |                   |

最佳答案

如果是平局,则需要第二高的唯一值。例如。对于值100、200、300、300,则需要200。

因此,获得最大值(MAX(salary) => 300),然后获得小于该最大值的最大值:

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

关于sql - 第二高薪水,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53759482/

10-11 15:52