[SQL刷题]LeetCode:176. 第二高的薪水

1,511 阅读1分钟

写在前面

题目+

编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。

例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。

思路

对于oracle很容易就想到下面的做法

select salary as SecondHighestSalary from (
select salary,rownum as rn
from (select salary from employee order by salary desc ))
where rn=2

貌似也没毛病。但其实毛病很大,很多 如果不存在第二高的薪水,分2种情况,一种是就1条记录,一种是SAL就一个。 那你根据ROWNUM就无法得到。

SELECT MAX(Salary) as SecondHighestSalary  FROM Employee 
WHERE Salary!=(SELECT MAX(Salary) FROM Employee )

这个思路貌似没问题,但在oracle中提交总是超时,我也不明所以。Mysql下提交通过的。

有没有其他方法呢?肯定有。