欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

176 - 第二高的薪水 - SQL

程序员文章站 2022-07-07 09:50:39
...

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

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

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

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

题目要求执行SQL语句返回第二高的薪水,如果不存在则返回NULL。那么题意可以分为两层进行处理,第一层是得到可能的第二高的薪水,第二层是判断结果是否存在来返回相应的结果。

  • 找到第二高的薪水:为了找到第二高的薪水有两种思路:
    • 使用max()找除去原始表中最大的Salary后最大的值
    • 将Salary降序排列后取第二个值,这里可使用LIMIT解决
  • 判断是否存在:这里要用到SQL中的流程函数IFNULL(value1, value2) ,使用可见SQL中的常用函数

LIMIT 参数:第一个参数表述从哪里开始查,第二个参数表示一共查几条。例如 SELECT * FROM TEST LIMIT 0,3;表示从位置0开始共查3条

可查阅:SQL Limit子句

SELECT IFNULL ((
    SELECT max(Salary) 
    FROM Employee
    WHERE Salary < (SELECT max(Salary) 
    				FROM Employee)), NULL) SecondHighestSalary
SELECT IFNULL ((
    SELECT DISTINCT Salary 
    FROM Employee
    ORDER BY Salary DESC
    LIMIT 1 OFFSET 1), NULL) SecondHighestSalary

相关标签: # Leetcode