mysql 第二高的薪水 的理解和拓展
阿新 • • 發佈:2020-08-03
題目來自於leetcode
第一次看到時,第一個想法就是
使用排序和limit
select Salary as SecondHighestSalary from Employee order by Salary desc limit 1,1
但這個還是錯誤的,因為如果有一樣的成績呢,比如第一名不唯一,那獲取的資料就不是第二了
所以先去重,再排序獲取
select distinct Salary as SecondHighestSalary from Employee order by Salary desc limit 1,1
但是如果資料表只有一條資料甚至無資料時,這就無法輸出null值,所以第一個方法不行
使用臨時表
select ( select distinct Salary from `Employee` order by Salary desc limit 1,1 ) as SecondHighestSalary
第二種方法
使用ifnull 和limit子句 來解決null問題
select ifnull( ( select distinct Salary from `Employee` order by Salary desc limit 1,1 ),null ) as SecondHighestSalary
最佳方法
使用max函式
select max(Salary) as SecondHighestSalary from `Employee` where Salary < (select max(Salary) from `Employee`)