题
目
描
述
:
\color{blue}题目描述:
题目描述:
编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200 |
+---------------------+
思 路 分 析 : \color{blue}思路分析: 思路分析:如果是求最高的薪水,我们只要使用max函数即可,但是现在要我们求第二高的薪水。比较容易想到的方法是先找出最高的薪水,然后找出比它小的并且最高的薪水就是第二高的。
然而还有一种更为巧妙的方法,我们先将所有薪水进行去重降序排列,然后获取第二个薪水不就是第二高的薪水吗?那如何获取降序序列的第二个值呢?
此时我们应该想到分页查询中的limit
关键字,
limit (page-1)*size,size;
要显示的页数 page,每页的条目数size。
我们要第二页的第一条,每页一条,这不就是第二个值么。
代 码 实 现 : \color{blue}代码实现: 代码实现:
select (
#首先进行去重
select distinct Salary
from Employee
#然后按照Salary降序排列
order by Salary desc
#在获取第二页的第一条
limit 1,1
)
as SecondHighestSalary;
博
客
推
荐
:
\color{blue}博客推荐:
博客推荐:
此题涉及到MySQL中的分页查询,请参考我的专栏
MySQL从入门到精通之分页查询