SQL架构
Create table If Not Exists Employee (Id int, Salary int)
Truncate table Employee
insert into Employee (Id, Salary) values ('1', '100')
insert into Employee (Id, Salary) values ('2', '200')
insert into Employee (Id, Salary) values ('3', '300')
编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。
±—±-------+
| Id | Salary |
±—±-------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
±—±-------+
例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。
±--------------------+
| SecondHighestSalary |
±--------------------+
| 200 |
±--------------------+
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/second-highest-salary
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路一:
两层嵌套,选取最大值a后再选一个小于a的最大值
# Write your MySQL query statement below
select max(salary) SecondHighestSalary
from employee
where salary <(
select max(salary)
from employee
)
思路二:
1.使用limit和offset
limit n子句表示查询结果返回前n条数据
offset n表示跳过x条语句
limit y offset x 分句表示查询结果跳过 x 条数据,读取前 y 条数据
使用limit和offset,降序排列再返回第二条记录可以得到第二大的值。
2.数据为空时返回NULL的情况
ifnull(a,b)函数:
如果value1不是空,结果返回a
如果value1是空,结果返回b
# Write your MySQL query statement below
select
ifnull (
(select distinct Salary
from Employee
order by Salary DESC
limit 1 offset 1),
NULL) as SecondHighestSalary
思路一可解决第二高的问题,思路二可解决第N高的问题。