编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200 |
+---------------------+
这道题目很有意思,取得不是max,而是第二个max。
- 第一次提交
select Salary as SecondHighestSalary from Employee
group by Salary desc
order by Salary desc
limit 1,1
看起来没有问题,但是如果limit 不存在,那么会返回一个空结构而不是null。
- 第二次提交
select ifnull(null,Salary ) as SecondHighestSalary from Employee
group by Salary desc
order by Salary desc
limit 1,1
- 第三次提交
select ifnull(Salary,null ) as SecondHighestSalary from Employee
group by Salary desc
order by Salary desc
limit 1,1
- 第四次提交
二、三次提交陷入了一个误区,直到select 1,Salary。我发现根本就没有输出,知道看了评论有一个大佬的代码。
select ifnull (
(select distinct Salary
from Employee
order by Salary desc
limit 1,1),
null
)as 'SecondHighestSalary'
ifnull(x,y),若x不为空则返回x,否则返回y
limit x,y 从第x条取y条
distinct,过滤关键字
比我写的好多了,真不愧是大佬。
结论
select limit 没有就为空
临时表用法。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/second-highest-salary
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
网友评论