SQL每日一题07:查询第二高薪水

42 阅读1分钟

题目

编写一个 SQL 查询,获取T20191108表中第二高的薪水(Salary) 。

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

参考答案

create table T20191108
(
ID int,
Salary int
)

insert into T20191108 values (1,100);
insert into T20191108 values (2,200);
insert into T20191108 values (3,300);

--SQL Server解法
select 
(select TOP 1 salary 
FROM T20191108
where Salary<> 
 (select TOP 1 Salary 
 FROM  T20191108 
 order by Salary desc)
order by Salary desc
) as SecondHighestSalary

答案解析

SQL Server中的TOP关键字可以取前N个数,我们可以通过排除 TOP 1 后的结果集再取TOP 1,这样就可以得到第二高的薪资了。

因此我们需要先取出工资最高的薪资

select TOP 1 Salary FROM T20191108 order by Salary desc

再通过where字句来排除这个最高的薪资,那么剩下的薪资数据再取最高值,那就是第二高的了。

--MySQL解法
select ifnull((
select distinct salary from T20191108 
order by Salary desc 
limit 1,1),null) as SecondHighestSalary

答案解析

Mysql中的limit 可以指定获取第N的数,所以相比SQL Server,Mysql可以直接通过limit 1,1这样的写法来获取排序后的第二高的薪资。