当前位置:网站首页>【LeetCode-SQL每日一练】——2. 第二高的薪水
【LeetCode-SQL每日一练】——2. 第二高的薪水
2022-07-29 22:12:00 【m0_54853420】
??写在前面
??*大家好呀,我是超梦。小伙伴们都知道,不管是在学习中还是日常工作中,几乎天天是要跟数据库打交道的,为了更好的操作数据库,我们的SQL知识储备是必不可少的。想要掌握好SQL,那少不了每天的练习与学习。接下来小梦会带领小伙伴们一起每天刷一道LeetCode-数据库(SQL)相关的题目,然后在文章后例举相关知识点帮助小伙伴们学习与巩固,更好的掌握SQL。
??* 小伙伴们如果在学习过程中有不明白的地方,欢迎评论区留言提问,小梦定知无不言,言无不尽。

目录
题目概述
?Employee表Employee 表 +----+--------+ | Id | Salary | +----+--------+ | 1 | 100 | | 2 | 200 | | 3 | 300 | +----+--------+题目:
??编写一个 SQL 查询,获取
Employee表中第二高的薪水(Salary),如果不存在第二高的薪水,那么查询应返回null。例如上述
Employee表,SQL查询应该返回200作为第二高的薪水。±--------------------+
| SecondHighestSalary |
±--------------------+
| 200 |
±--------------------+
解题思路
方式一
首先我们先写一个select查询语句,查出Employee表中最高的薪水。
select max(salary) from Employee;
2. 然后我们把第一步的查询语句作为一个子句,我们通过where条件,使salary小于该子句得到的最高薪水。简单来讲就是我查询到一个小于最高的薪水的最高薪水,不就是第二高薪水嘛。
select max(salary) from Employee where salary < (select max(salary) from Employee);3. 接下来我们根据题意还需要做一个null判断,如果不存在第二高薪水,就返回null值。这里我们用到了ifnull函数(文章知识点总结部分会有对ifnull函数的讲解哦~)。
题解:
select ifnull(( select max(salary) from Employee where salary < (select max(salary) from Employee)),null) as SecondHighestSalary;
方式二
- 首先我们将salary字段进行降序排序。
- 通过distinct将alary中的值去重。这里可能会有小伙伴们问了,employee表中salary没有重复的值呀为什么要加去重操作?小梦跟小伙伴们说一下,题目表中数据量很少,当数据量大的时候我们不能保证没有相同数据。当出现重复数据而我们没有进行去重操作,那我们通过降序排序也无法判断第二高的数据在哪一位置。当进行去重操作后,我们通过降序排序就能很清楚的知道第二高的数据就是排在第二位。所以为了谨慎与正确性,我们需要加上distinct。
- 通过以上去重排序操作后,我们很清楚的知道第二高的薪水就是排在第二位,再通过limit 1,1或者limit 1 offset1来查询出第二高的薪水。(limit1,1:前面的那一个1意思是跳过一条数据,后面的1是取一个数据,意思就是跳过一个数据,从第二条数据开始取一条数据。)(limit 1 offset 1:前面那个1意思是取一个数据,后面那一个1是跳过一条数据,整个意思就是跳过一个数据,从第二条数据开始取一条数据。)
- 接下来我们根据题意还需要做一个null判断,如果不存在第二高薪水,就返回null值。
题解:
##limit select ifnull( (select distinct Salary from Employee order by Salary desc limit 1,1), null) as SecondHighestSalary; ## limit offset select ifnull( (select distinct Salary from Employee order by Salary desc limit 1 offset 1), null) as SecondHighestSalary;
力扣官方解析
方法一:使用子查询和 LIMIT 子句
将不同的薪资按降序排序,然后使用 LIMIT 子句获得第二高的薪资。
SELECT DISTINCT Salary AS SecondHighestSalary FROM Employee ORDER BY Salary DESC LIMIT 1 OFFSET 1然而,如果没有这样的第二最高工资,这个解决方案将被判断为 “错误答案”,因为本表可能只有一项记录。为了克服这个问题,我们可以将其作为临时表。
SELECT (SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT 1 OFFSET 1) AS SecondHighestSalary方法二:使用 IFNULL 和
LIMIT子句SELECT IFNULL( (SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT 1 OFFSET 1), NULL) AS SecondHighestSalary
代码实现
方式一
select ifnull((
select max(salary) from Employee
where
salary < (select max(salary) from Employee)),null)
as SecondHighestSalary;
输出与预期结果一致,答题成功!
方式二
limit
select
ifnull(
(select distinct Salary
from Employee
order by Salary desc
limit 1,1),
null) as SecondHighestSalary;

输出与预期结果一致,答题成功!

limit offset
SELECT
IFNULL(
(SELECT DISTINCT Salary
FROM Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1),
NULL) AS SecondHighestSalary

输出与预期结果一致,答题成功!

知识点总结
limit子句
我们来简单回顾一下limit与limit offset的知识点,要常常温故而知新~
- limit n 分句表示: 读取 n 条数据
- limit n, m 分句表示: 跳过 n 条数据,读取 m 条数据
- limit n 等价于 limit 0,n
- limit m offset n 分句表示: 跳过 n 条数据,读取 m 条数据
ifnull函数
通过今天这一题,相信小伙伴们对ifnull函数也有些认识了。
ifnull(expression ,y)函数解释:
如果第一个参数的表达式 expression 为 NULL,则返回第二个参数y的值(此题中是返回null值)。
如果第一个参数的表达式 expression 为 不为NULL,则返回第一个参数表达式expression的值。
边栏推荐
- Docker 下 Oracle 安装与配置
- GBASE 8s 数据库的智能大对象备份
- 支持keep alive长连接【转】
- HMS Core音频编辑服务音源分离与空间音频渲染,助力快速进入3D音频的世界
- Advanced Mathematics (Seventh Edition) Tongji University Exercises 3-7 Individual Answers
- lambda表达式
- COPU陆首群教授应邀在ApacheCon Asia会议上致辞
- SAP MIGO 报错-在例程WERT_SIMULIEREN字段NEUER_PREIS中字段溢出
- 【CVPR2022】A Unified Query-based Paradigm for Point Cloud Understanding
- Baidu Intelligent Cloud Zhangmiao: Detailed explanation of enterprise-level seven-layer load balancing open source software BFE
猜你喜欢
随机推荐
Professor Lu Shouqun from COPU was invited to give a speech at ApacheCon Asia
Advanced Mathematics (Seventh Edition) Tongji University Exercises 3-8 Individual Answers
支持keep alive长连接【转】
GTK在drawable区域绘图
获取七牛云地址文件保存到本地
viewpager fragment data refresh
华东师范大学副校长周傲英:数据赋能,从数据库到数据中台
十一、HikariCP源码分析之HouseKeeper
INFTnews | Forbes Web3 exploration
html+css+php+mysql实现注册+登录+修改密码(附完整代码)
新库上线 | CnOpenData国际货运代理信息数据
【企业架构框架】是什么让 TOGAF 10 成为有价值的贡献
小程序微信定位不准
聊聊阻容降压原理 和 实际使用的电路
文献综述的写作技巧,掌握这些技巧,效率大大提高!
GBASE 8s 用户标示与鉴别
【板栗糖GIS】arcmap—如何在表格空值处进行批量求和
ah?Now the primary test recruitment requirements will be automated?
GBASE 8s 通过light scan优化查询性能
汉字的URL转义字符函数










