题目来自于leetcode
第一次看到时,第一个想法就是
使用排序和limit
select Salary as SecondHighestSalary from Employee order by Salary desc limit 1 offset 1
但这个还是错误的,因为如果有一样的成绩呢,比如第一名不唯一,那获取的数据就不是第二了
所以先去重,再排序获取
select distinct Salary as SecondHighestSalary from Employee order by Salary desc limit 1 offset 1
但是如果数据表只有一条数据甚至无数据时,这就无法输出null值,所以第一个方法不行
使用临时表
select ( select distinct Salary from `Employee` order by Salary desc limit 1 offset 1 ) as SecondHighestSalary
这种方法还可以查第N高的薪水 limit 1 offset n-1
第二种方法
使用ifnull 和limit子句 来解决null问题
select ifnull( ( select distinct Salary from `Employee` order by Salary desc limit 1 offset 1 ), null ) as SecondHighestSalary
第三种方法
使用max函数
select max(Salary) as SecondHighestSalary from `Employee` where Salary < (select max(Salary) from `Employee`)