leetcode-176. 第二高的薪水

  • 题目
    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)
链接:176. 第二高的薪水

  • 分析

首先根据最终的结果来看,出现了SecondHighestSalary,而在所建立的表中并没有这个字段,所以我们在将最终的查询结果用as指定一个别名(SecondHighestSalary)。
题目是说第二高,然后对salary使用order by排序即可,,再用limit限制查询结果返回的数量即可。

  • 代码
select distinct Salary as SecondHighestSalary from Employee order by Salary desc limit 1,1 ;

最开始就是按照上面的代码做,但是有个问题是它对于“没有第二高薪水”这一情况并不能返回null。
再参考了leetcode评论区大佬的代码评论后,发现在嵌套一个select之后就可以了,在内层select未查询到记录后,外层查询便会返回null。
具体代码如下:

select(
    select distinct Salary from Employee order by Salary desc limit 1,1
)as SecondHighestSalary;

另外对于limit的用法如下:

select * from tableName limit i,n
# i:为查询结果的索引值(默认从0开始),当i=0时可省略i
# n:为查询结果返回的数量
# i与n之间使用英文逗号","隔开
# limit n 等同于 limit 0,n

在这里插入图片描述
2019.12.08

发布了52 篇原创文章 · 获赞 59 · 访问量 6841

猜你喜欢

转载自blog.csdn.net/ataraxy_/article/details/103445055