业务背景:在实际的开发过程中我们经常遇到规则为第几第几的数据,譬如薪水第二高霍着薪水前从第二到第五高的数据
编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200 |
+---------------------+
则使用limit 条数 offset(跳过的index)
譬如获取上面的第二高的薪水,则sql 应该为 limit 1 offset 1
如果取从第二到第四高的薪水,则sql 应该为 limit 3(从第二到第四有三条数据) offset 1(跳过前面第一的数据)
同理如果取从第三到到五高的薪水,则sql应该为 limit 3 offset 2(跳过前面第一和第二的数据)
则满足上面的sql应该为:
SELECT
IFNULL(
(SELECT DISTINCT Salary
FROM Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1),
NULL) AS SecondHighestSalary