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`)
  • 相关阅读:
    Kotlin基础-异常处理错误
    Kotlin基础-对象声明和表达式
    Kotlin基础-枚举类
    Kotlin基础-数据类
    Kotlin基础-可见修饰符、嵌套类
    Kotlin基础-类、属性、方法
    Kotlin基础-函数
    Kotlin基础-控制流
    Kotlin基础-集合类型 Map
    Kotlin基础-集合类型 Set
  • 原文地址:https://www.cnblogs.com/littlebob/p/13425764.html
Copyright © 2011-2022 走看看