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