zoukankan      html  css  js  c++  java
  • 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`)
  • 相关阅读:
    洛谷P3513 [POI2011]KON-Conspiracy
    柱状图 三分法+树状数组
    CF习题集三
    CF习题集二
    CF习题集一
    单调队列总结
    SP688 SAM
    lemon使用方法
    洛谷 P2403 [SDOI2010]所驼门王的宝藏 题解
    字符串学习笔记二
  • 原文地址:https://www.cnblogs.com/littlebob/p/13425764.html
Copyright © 2011-2022 走看看