思路1:
即降序排序后取第二个。这里难搞的是空值情况。最后使用isnull函数,如果选择为空,则返回为空。
代码1:
SELECT
ifnull( ( SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT 1 OFFSET 1 ), NULL ) AS SecondHighestSalary;
思路2:
第二高薪水即最高薪水以下的最高薪水。
SELECT MAX(Salary) AS SecondHighestSalary
FROM Employee
WHERE Salary < (SELECT MAX(Salary) FROM Employee);
分析:
第一种更加直观,但是一般而言,排序耗时要多于取最大值耗时。因此在时间与空间上都是第二种更好。