编写一个 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 |
and not
|SecondHighestSalary|
| |
如果出现平局,您需要第二高的不同值。例如。对于值 100、200、300、300,您需要 200。
因此获得最高值(MAX(salary)
=> 300),然后获取小于该值的最高值:
select max(salary) from mytable where salary < (select max(salary) from mytable);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)