1. 程式人生 > 實用技巧 >mysql 第二高的薪水 的理解和拓展

mysql 第二高的薪水 的理解和拓展

題目來自於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`)