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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值