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 07 MySQL
MySQL查询学习之基础查询操作
May 08 MySQL
MySQL 那些常见的错误设计规范,你都知道吗
Jul 16 MySQL
MySQL深度分页(千万级数据量如何快速分页)
Jul 25 MySQL
SQL实现LeetCode(197.上升温度)
Aug 07 MySQL
SQL注入篇学习之盲注/宽字节注入
Mar 03 MySQL
mysql 生成连续日期及变量赋值
Mar 20 MySQL
MySQL创建管理HASH分区
Apr 13 MySQL
深入理解MySQL中MVCC与BufferPool缓存机制
May 25 MySQL
Mysql中的触发器定义及语法介绍
Jun 25 MySQL
mysql sock文件存储了什么信息
Jul 15 MySQL
mysql序号rownum行号实现方式
Dec 24 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
Search Engine Friendly的URL设计
2006/10/09 PHP
PHP MemCached 高级缓存应用代码
2010/08/05 PHP
几个有用的php字符串过滤,转换函数代码
2012/05/01 PHP
解析WordPress中的post_class与get_post_class函数
2016/01/04 PHP
PHP实现的简单适配器模式示例
2017/06/22 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
2019/04/10 PHP
php xhprof使用实例详解
2019/04/15 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
2020/01/02 PHP
jquery的颜色选择插件实例代码
2008/10/02 Javascript
关于jquery input textare 事件绑定及用法学习
2013/04/03 Javascript
url参数中有+、空格、=、%、&amp;、#等特殊符号的问题解决
2013/05/15 Javascript
nodejs批量修改文件编码格式
2015/01/22 NodeJs
jQuery实现的简单折叠菜单(折叠面板)效果代码
2015/09/16 Javascript
js检查是否关闭浏览器的方法
2016/08/02 Javascript
理解JavaScript原型链
2016/10/25 Javascript
jquery判断页面网址是否有效的两种方法
2016/12/11 Javascript
使用Promise链式调用解决多个异步回调的问题
2017/01/15 Javascript
详解如何使用Vue2做服务端渲染
2017/03/29 Javascript
webpack+react+antd脚手架优化的方法
2018/04/02 Javascript
JavaScript执行环境及作用域链实例分析
2018/08/01 Javascript
JS实现的贪吃蛇游戏案例详解
2019/05/01 Javascript
简介JavaScript错误处理机制
2020/08/04 Javascript
[36:02]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第一局
2016/02/28 DOTA
python下setuptools的安装详解及No module named setuptools的解决方法
2017/07/06 Python
Python及Pycharm安装方法图文教程
2019/08/05 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
python实现磁盘日志清理的示例
2020/11/05 Python
澳大利亚在线生活方式商店:Mytopia
2018/07/08 全球购物
给水工程专业毕业生自荐信
2014/01/28 职场文书
腾讯广告词
2014/03/19 职场文书
优秀学生干部个人事迹材料
2014/06/02 职场文书
2015年基层党支部工作总结
2015/05/21 职场文书
沂蒙六姐妹观后感
2015/06/08 职场文书
python opencv通过按键采集图片源码
2021/05/20 Python
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS