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