0x01.问题
编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200 |
+---------------------+
SQL架构:
Create table If Not Exists Employee (Id int, Salary int)
Truncate table Employee
insert into Employee (Id, Salary) values ('1', '100')
insert into Employee (Id, Salary) values ('2', '200')
insert into Employee (Id, Salary) values ('3', '300')
注:此题来源于Leetcode,戳我前往
0x02.简要解决需求
查找第N高问题的整体思路是:
- 使用
DISTINCT
去重 - 先使用
ORDER BY
排序 - 再使用
LIMIT
分页 - 处理不存在返回空值的问题:使用
IF NULL
0x03.解决示范
SELECT
IFNULL(
(SELECT DISTINCT Salary
FROM Employee
ORDER BY Salary DESC
LIMIT 1,1),
NULL) AS SecondHighestSalary;