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`)
  • 相关阅读:
    Windows抓屏技术
    几种常见的跨域技术
    实现圆角的3种方式
    svg基础
    nodejs基础(二)
    nodejs的基础(1)
    css3一些常见样式的兼容性处理
    JS中Array的使用
    浏览器的几种模式
    XHR2通信基础
  • 原文地址:https://www.cnblogs.com/littlebob/p/13425764.html
Copyright © 2011-2022 走看看