Leetcode-数据库-175

第二高的薪水

我第一次尝试:
SELECT salary AS SecondHighestSalary
FROM Employee
ORDER BY salary DESC
LIMIT 1,1

根据salary降序,然后取第二个,但是这有一个问题,就是如果数据少于两个,就会报错
在这里插入图片描述
错误显示,当表中数据只有一条时,返回了[],预期是得到[null]
意思是,如果没有第二高的薪水,应该给返回一条数据,这条数据是null
但是我的方法返回了0条数据。所以算我不对。

对于这个问题,DataGrip和Navicat的表现完全不同。DataGrip可以清楚地知道,返回的数据是null还是无数据。而Navicat不管是null还是无数据,都是一样的。建议使用DataGrip。

方法1:
select (
select DISTINCT Salary
from Employee
order by Salary DESC
limit 1,1)
as SecondHighestSalary;

distinct是为了去重,因为题目要求第二高的薪水,意思是要去重的。
注意order by 默认是升序

方法2:
select max(Salary) as SecondHighestSalary
from Employee
where Salary < (
select max(Salary) from Employee
);

先找到最大值,然后再从小于最大值的集合里找到最大值,就是第二大的了

方法3:
select
ifnull((select distinct Salary from Employee order by Salary desc limit 1,1),null) as SecondHighestSalary;

ifnull方法,如果参数1是null,那就返回null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值