zoukankan      html  css  js  c++  java
  • [SQL]LeetCode176. 第二高的薪水 | Second Highest Salary

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/9720894.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    Write a SQL query to get the second highest salary from the Employee table.

    +----+--------+
    | Id | Salary |
    +----+--------+
    | 1  | 100    |
    | 2  | 200    |
    | 3  | 300    |
    +----+--------+
    

    For example, given the above Employee table, the query should return 200 as the second highest salary. If there is no second highest salary, then the query should return null.

    +---------------------+
    | SecondHighestSalary |
    +---------------------+
    | 200                 |
    +---------------------+

    编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。

    +----+--------+
    | Id | Salary |
    +----+--------+
    | 1  | 100    |
    | 2  | 200    |
    | 3  | 300    |
    +----+--------+
    

    例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null

    +---------------------+
    | SecondHighestSalary |
    +---------------------+
    | 200                 |
    +---------------------+

    方法1:使用子查询和LIMIT子句

    算法:按降序对不同的工资进行排序,然后利用该LIMIT子句获得第二高的工资。

    1 SELECT DISTINCT
    2     Salary AS SecondHighestSalary
    3 FROM
    4     Employee
    5 ORDER BY Salary DESC
    6 LIMIT 1 OFFSET 1

    但是,如果没有这样的第二高薪,这个解决方案将被判定为“错误答案”,因为此表中可能只有一条记录。为了解决这个问题,我们可以将其作为临时表。

    1 SELECT
    2     (SELECT DISTINCT
    3             Salary
    4         FROM
    5             Employee
    6         ORDER BY Salary DESC
    7         LIMIT 1 OFFSET 1) AS SecondHighestSalary
    8 ;

    
    

    方法2:使用IFNULLLIMIT子句

    解决'NULL'问题的另一种方法是使用IFNULL如下功能。

    1 SELECT
    2     IFNULL(
    3       (SELECT DISTINCT Salary
    4        FROM Employee
    5        ORDER BY Salary DESC
    6         LIMIT 1 OFFSET 1),
    7     NULL) AS SecondHighestSalary

    105ms

    1 # Write your MySQL query statement below
    2 select (
    3   select distinct Salary from Employee order by Salary Desc limit 1 offset 1
    4 )as SecondHighestSalary

    106ms

    1 # Write your MySQL query statement below
    2 select max(salary) as SecondHighestSalary
    3 from employee
    4 where salary < (select max(salary) from employee)

    108ms

    1 # Write your MySQL query statement below
    2 # select distinct Salary SecondHighestSalary from Employee order by Salary DESC limit 1,1
    3 select ifNull((select distinct Salary from Employee order by Salary Desc limit 1,1),null) as SecondHighestSalary

    110ms

    1 # Write your MySQL query statement below
    2 SELECT IFNULL( (SELECT DISTINCT salary
    3 FROM Employee
    4 ORDER BY salary DESC
    5 LIMIT 1,1),NULL) AS SecondHighestSalary;
  • 相关阅读:
    PVS 7.6 部署教程
    PHP下载远程图片的3个方法
    [Xcode 实际操作]二、视图与手势-(2)UIView视图的层次关系
    [Swift]检查API可用性
    [Xcode 实际操作]二、视图与手势-(1)UIView视图的基本使用
    [Swift]LeetCode103. 二叉树的锯齿形层次遍历 | Binary Tree Zigzag Level Order Traversal
    [Swift]forEach详解
    [Swift]LeetCode937. 重新排列日志文件 | Reorder Log Files
    [Swift]LeetCode940. 不同的子序列 II | Distinct Subsequences II
    [Swift]LeetCode939. 最小面积矩形 | Minimum Area Rectangle
  • 原文地址:https://www.cnblogs.com/strengthen/p/9720894.html
Copyright © 2011-2022 走看看