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

题目来自于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`)
原文地址:https://www.cnblogs.com/littlebob/p/13425764.html