编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。
+----+-------+
| Id | Salary|
+----+-------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+-------+
例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。
+-----------------------------+
| SecondHighestSalary |
+-----------------------------+
| 200 |
+-----------------------------+
解法一:(子查询 + 分页思想)
SELECT (SELECT DISTINCT Salary
FROM Employee
ORDER BY Salary DESC
LIMIT 1,1)
AS SecondHighestSalary
解法二:(在去掉最大值的表里选择最大值)
SELECT MAX(Salary) SecondHighestSalary
FROM Employee
WHERE Salary <> (SELECT MAX(Salary) FROM Employee)
解法三:(IFNULL 函数)
SELECT
IFNULL((SELECT DISTINCT Salary
FROM Employee
ORDER BY Salary DESC
LIMIT 1,1), NULL)
AS SecondHighestSalary
小结:
- SQL查询语句中的 limit 与 offset 的区别
- limit y 分句表示: 读取 y 条数据
- limit x, y 分句表示: 跳过 x 条数据,读取 y 条数据
- limit y offset x 分句表示: 跳过 x 条数据,读取 y 条数据
- limit n 等价于 limit 0,n