176 - 第二高的薪水 - SQL

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

发布了448 篇原创文章 · 获赞 122 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/Forlogen/article/details/105568036