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的join buffer原理
Apr 29 MySQL
MySql学习笔记之事务隔离级别详解
May 12 MySQL
浅谈MySQL 亿级数据分页的优化
Jun 15 MySQL
浅析MySQL如何实现事务隔离
Jun 26 MySQL
MySQL系列之十五 MySQL常用配置和性能压力测试
Jul 02 MySQL
MySQL定时备份数据库(全库备份)的实现
Sep 25 MySQL
浅谈MySQL表空间回收的正确姿势
Oct 05 MySQL
Linux7.6二进制安装Mysql8.0.27详细操作步骤
Nov 27 MySQL
详解MySQL的主键查询为什么这么快
Apr 03 MySQL
MySQL中一条SQL查询语句是如何执行的
Apr 08 MySQL
Mysql数据库group by原理详解
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
Syphon 使用方法
2021/03/03 冲泡冲煮
php URL编码解码函数代码
2009/03/10 PHP
php用ini_get获取php.ini里变量值的方法
2015/03/04 PHP
PHP的关于变量和日期处理的一些面试题目整理
2015/08/10 PHP
Laravel中服务提供者和门面模式的入门介绍
2017/11/06 PHP
关于用Jquery的height()、width()计算动态插入的IMG标签的宽高的问题
2010/12/08 Javascript
javascript创建createXmlHttpRequest对象示例代码
2014/02/10 Javascript
js获取指定日期周数以及星期几的小例子
2014/06/27 Javascript
一个JavaScript去除字符串末尾的空白实例代码
2014/09/22 Javascript
JS实现网页背景颜色与select框中颜色同时变化的方法
2015/02/27 Javascript
JQuery zClip插件实现复制页面内容到剪贴板
2015/11/02 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
2016/02/17 Javascript
location.hash保存页面状态的技巧
2016/04/28 Javascript
使用jQuery Mobile框架开发移动端Web App的入门教程
2016/05/17 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
2016/07/01 Javascript
jQuery.parseHTML() 函数详解
2017/01/09 Javascript
微信小程序微信支付接入开发实例详解
2017/04/12 Javascript
Vue基础学习之项目整合及优化
2019/06/02 Javascript
微信小程序如何自定义table组件
2019/06/29 Javascript
原生js实现瀑布流效果
2020/03/09 Javascript
python备份文件的脚本
2008/08/11 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
2016/06/13 Python
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
2017/11/08 Python
Python+request+unittest实现接口测试框架集成实例
2018/03/16 Python
Python实现两个list求交集,并集,差集的方法示例
2018/08/02 Python
Python求正态分布曲线下面积实例
2019/11/20 Python
Python+OpenCV 实现图片无损旋转90°且无黑边
2019/12/12 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
2020/04/13 Python
Python验证码截取识别代码实例
2020/05/16 Python
python dict乱码如何解决
2020/06/07 Python
python matlab库简单用法讲解
2020/12/31 Python
Jones Bootmaker官网:优质靴子和鞋子在线
2020/11/30 全球购物
个人授权委托书范本
2014/04/03 职场文书
幼儿园三八妇女节活动总结
2015/02/06 职场文书
贫困生证明范文
2015/06/16 职场文书
如何利用React实现图片识别App
2022/02/18 Javascript