我正在尝试解决 LeetCode 问题 https://leetcode.com/problems/second-highest-salary/description/ ;到目前为止我的解决方案(另见 http://sqlfiddle.com/#!9/4752cb/1 )是:
SELECT Salary AS SecondHighestSalary
FROM Employee
ORDER BY Salary DESC LIMIT 1, 1;
问题是我的解决方案在以下测试用例中失败:
换句话说,它只是不返回结果而不是返回
NULL
。如果没有第二高的薪水,我怎样才能让它返回 NULL
?更新
在 Return a value if no record is found 之后,我尝试将查询封装在子查询中:
SELECT (SELECT Salary
FROM Employee
ORDER BY Salary DESC LIMIT 1, 1) AS SecondHighestSalary;
但是,这在不同的测试用例中失败了,其中有两名员工的薪水相同:
在这种情况下,我们显然也应该返回
NULL
。我如何调整上面的“更接近解决方案”查询来处理这个问题?
最佳答案
这里的 OFFSET 1 表示没有第一个(例如:如果你不想显示第一个 2 那么 OFFSET 将是 2)
SELECT
Salary AS SecondHighestSalary
FROM
Employee
ORDER BY
Salary
LIMIT 1 OFFSET 1;
关于mysql - 选择列中的第 n 个最大值,如果不存在则为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47148094/