题目
编写一个 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这样的写法来获取排序后的第二高的薪资。