Leetcode 176.第二高的薪水

题目: 编写一个 SQL 查询,获取Employee表中第二高的薪水(Salary)

+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+

例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。

+---------------------+
| SecondHighestSalary |
+---------------------+
| 200                 |
+---------------------+


思路:

  1. 首先查出所有员工的薪水,去重。然后按薪水降序排序,用limit选取第二高的薪水。

  2. 嵌套查询,首先从表中查出最高的薪水,然后查询比全表最高薪水低的最高薪水,就是第二高的薪水。

SQL查询语句中的 limit 与 offset 的区别:

limit y 分句表示: 读取 y 条数据

limit x, y 分句表示: 跳过 x 条数据,读取 y 条数据

limit y offset x 分句表示: 跳过 x 条数据,读取 y 条数据


//思路1:
Select distinct Salary AS 'SecondHighestSalary'
from Employee order by Salary DESC limit 1,1;

//思路2:
Select max(Salary) as SecondHighestSalary 
from Employee where Salary <(
	Select max(Salary) from Employee
);


题目地址