SQL实现LeetCode(176.第二高薪水)


Posted in MySQL onAugust 04, 2021

[LeetCode] 176.Second Highest Salary 第二高薪水

Write a SQL query to get the second highest salary from the Employee table.

+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+

For example, given the above Employee table, the second highest salary is 200. If there is no second highest salary, then the query should return null.

这道题让我们找表中某列第二大的数,这道题有很多种解法,先来看一种使用Limit和Offset两个关键字的解法,MySQL中Limit后面的数字限制了我们返回数据的个数,Offset是偏移量,那么如果我们想找第二高薪水,我们首先可以先对薪水进行降序排列,然后我们将Offset设为1,那么就是从第二个开始,也就是第二高薪水,然后我们将Limit设为1,就是只取出第二高薪水,如果将Limit设为2,那么就将第二高和第三高薪水都取出来:

解法一:

SELECT Salary FROM Employee GROUP BY Salary
UNION ALL (SELECT NULL AS Salary)
ORDER BY Salary DESC LIMIT 1 OFFSET 1;

我们也可以使用Max函数来做,这个返回最大值,逻辑是我们取出的不包含最大值的数字中的最大值,即为第二大值:

解法二:

SELECT MAX(Salary) FROM Employee 
WHERE Salary NOT IN
(SELECT MAX(Salary) FROM Employee);

下面这种方法和上面基本一样,就是用小于号<代替了Not in关键字,效果相同:

解法三:

SELECT MAX(Salary) FROM Employee
Where Salary <
(SELECT MAX(Salary) FROM Employee);

最后来看一种可以扩展到找到第N高的薪水的方法,只要将下面语句中的1改为N-1即可,第二高的薪水带入N-1就是1,下面语句的逻辑是,假如我们要找第二高的薪水,那么我们允许其中一个最大值存在,然后在其余的数字中找出最大的,即为整个的第二大的值;

解法四:

SELECT MAX(Salary) FROM Employee E1
WHERE 1 =
(SELECT COUNT(DISTINCT(E2.Salary)) FROM Employee E2
WHERE E2.Salary > E1.Salary);

参考资料:

https://leetcode.com/discuss/47041/very-very-simple-solution

https://leetcode.com/discuss/42849/general-solution-not-using-max

https://leetcode.com/discuss/21751/simple-query-which-handles-the-null-situation

到此这篇关于SQL实现LeetCode(176.第二高薪水)的文章就介绍到这了,更多相关SQL实现第二高薪水内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
mysql字符串截取函数小结
Apr 05 MySQL
教你解决往mysql数据库中存入汉字报错的方法
May 06 MySQL
MySQL 数据丢失排查案例
May 08 MySQL
如何自己动手写SQL执行引擎
Jun 02 MySQL
分析mysql中一条SQL查询语句是如何执行的
Jun 21 MySQL
MySQL开启事务的方式
Jun 26 MySQL
MySQL 那些常见的错误设计规范,你都知道吗
Jul 16 MySQL
MySQL中datetime时间字段的四舍五入操作
Oct 05 MySQL
MySQL学习之基础操作总结
Mar 19 MySQL
详细介绍MySQL中limit和offset的用法
May 06 MySQL
MySQL 自动填充 create_time 和 update_time
May 20 MySQL
MySQL控制流函数(-if ,elseif,else,case...when)
Jul 07 MySQL
Mysql8.0递归查询的简单用法示例
Aug 04 #MySQL
SQL之各种join小结详细讲解
SQL实现LeetCode(175.联合两表)
Aug 04 #MySQL
一篇文章带你深入了解Mysql触发器
Aug 02 #MySQL
sql注入教程之类型以及提交注入
MySQL子查询中order by不生效问题的解决方法
Aug 02 #MySQL
MySQL中utf8mb4排序规则示例
Aug 02 #MySQL
You might like
150kHz到30Mhz完全冲浪手册
2020/03/20 无线电
php全角字符转换为半角函数
2014/02/07 PHP
PHP入门经历和学习过程分享
2014/04/11 PHP
PHP中的闭包(匿名函数)浅析
2015/02/07 PHP
JS对URL字符串进行编码/解码分析
2008/10/25 Javascript
jquery 缓存问题的几个解决方法
2013/11/11 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
JS中使用Array函数shift和pop创建可忽略参数的例子
2014/05/28 Javascript
JavaScript中的apply和call函数详解
2014/07/20 Javascript
JS仿iGoogle自定义首页模块拖拽特效的方法
2015/02/13 Javascript
详细谈谈javascript的对象
2016/07/31 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
2016/08/03 Javascript
JavaScript随机生成颜色的方法
2016/10/15 Javascript
简单实现jquery焦点图
2016/12/12 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
2018/05/07 Javascript
[02:26]2016国际邀请赛8月3日开战 中国军团出征西雅图
2016/08/02 DOTA
python发送邮件的实例代码(支持html、图片、附件)
2013/03/04 Python
Python实现递归遍历文件夹并删除文件
2016/04/18 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
Python列表删除的三种方法代码分享
2017/10/31 Python
Python连接Mssql基础教程之Python库pymssql
2018/09/16 Python
python集合常见运算案例解析
2019/10/17 Python
python实现将range()函数生成的数字存储在一个列表中
2020/04/02 Python
Python将二维列表list的数据输出(TXT,Excel)
2020/04/23 Python
运行python提示no module named sklearn的解决方法
2020/11/29 Python
美国面料纺织品商城:Fabric.com
2017/06/28 全球购物
Joseph官网:英国小众奢侈品牌
2019/05/17 全球购物
彪马土耳其官网:PUMA土耳其
2019/07/14 全球购物
美国购物网站:Clickhere2shop
2021/01/28 全球购物
拓展培训心得体会
2014/01/04 职场文书
书香校园活动方案
2014/02/28 职场文书
责任担保书范文
2014/05/21 职场文书
三八妇女节趣味活动方案
2014/08/23 职场文书
用Python爬虫破解滑动验证码的案例解析
2021/05/06 Python
HTML中的表单Form实现居中效果
2021/05/25 HTML / CSS
Go语言编译原理之变量捕获
2022/08/05 Golang