【发布时间】:2021-02-06 22:38:07
【问题描述】:
这是一个经典问题:编写一个 SQL 查询,从 Employee 表中获取第二高的薪水。
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
例如,给定上面的 Employee 表,查询应该返回 200 作为第二高的薪水。如果没有第二高的薪水,则查询应返回 null。
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200 |
+---------------------+
我在 SQL server 中使用 CTE 来解决这个问题:
with Emp_Rank AS
(select Salary, row_number()over(order by Salary) as Salrank
from Employee)
Select Salary as SecondHighestSalary
from Emp_Rank
where Emp_Rank.Salrank = 2
答案不被接受,如下图所示。我认为 [] vs [null] 是问题,但我不知道为什么或如何解决它。
输入 {"headers": {"Employee": ["Id", "Salary"]}, "rows": {"Employee": [[1, 100]]}} 输出 {“标题”:[“SecondHighestSalary”],“值”:[]} 预期的 {"headers":["SecondHighestSalary"],"values":[[null]]}
Ps,我使用 Max() 来解决这个问题没有问题。 null 在那里不是问题。 (为什么?)
非常感谢您的宝贵时间。
【问题讨论】:
标签: sql sql-server sql-order-by greatest-n-per-group