【发布时间】:2017-11-07 00:30:29
【问题描述】:
我正在尝试解决 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。如何调整上面的“更接近解决方案”查询来处理这个问题?
【问题讨论】:
-
如果两个(或更多)员工的最高薪水相同怎么办……我们返回最高薪水吗?还是我们退回下一个较低的工资?
-
Spencer,在这种情况下,我们返回下一个较低的薪水(尽管这在 LeetCode 的问题陈述中并不清楚;我是从一个失败的测试用例中发现的)。
-
这里的问题是.. 如果我们可以说 20 个人的薪水第二高,那么该特定薪水的相关人员怎么样.. 如果我们可以确定谁是该特定薪水的人只需要一个带有不同查询的薪水。我认为
LeetCode's problem不太清楚。
标签: mysql