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数据库中存入汉字报错的方法
May 06 MySQL
mysql对于模糊查询like的一些汇总
May 09 MySQL
MySQL中出现乱码问题的终极解决宝典
May 26 MySQL
mysql升级到5.7时,wordpress导数据报错1067的问题
May 27 MySQL
mysql中between的边界,范围说明
Jun 08 MySQL
MYSQL 的10大经典优化案例场景实战
Sep 14 MySQL
详解MySql中InnoDB存储引擎中的各种锁
Feb 12 MySQL
MySQL的存储函数与存储过程的区别解析
Apr 08 MySQL
mysql 索引的数据结构为什么要采用B+树
Apr 26 MySQL
MySQL普通表如何转换成分区表
May 30 MySQL
MySQL范围查询优化的场景实例详解
Jun 10 MySQL
mysqldump进行数据备份详解
Jul 15 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
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
2016/11/15 PHP
php微信公众平台交互与接口详解
2016/11/28 PHP
PHP静态成员变量和非静态成员变量详解
2017/02/14 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
php-msf源码详解
2017/12/25 PHP
JavaScript获得选中文本内容的方法
2008/12/02 Javascript
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
JQuery的ready函数与JS的onload的区别详解
2013/11/21 Javascript
jQuery简单实现两级下拉菜单效果代码
2015/09/15 Javascript
使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧
2015/12/23 Javascript
使用three.js 画渐变的直线
2016/06/05 Javascript
jQuery如何解决IE输入框不能输入的问题
2016/10/08 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
2016/12/08 Javascript
树结构之JavaScript
2017/01/24 Javascript
bootstrap基本配置_动力节点Java学院整理
2017/07/14 Javascript
node-sass安装失败的原因与解决方法
2017/09/04 Javascript
vue 2.0项目中如何引入element-ui详解
2017/09/06 Javascript
浅析Node.js非对称加密方法
2018/01/29 Javascript
Python实现PS图像调整颜色梯度效果示例
2018/01/25 Python
python3 pandas 读取MySQL数据和插入的实例
2018/04/20 Python
python 将对象设置为可迭代的两种实现方法
2019/01/21 Python
Python字典的核心底层原理讲解
2019/01/24 Python
使用Python快速制作可视化报表的方法
2019/02/03 Python
python写日志文件操作类与应用示例
2019/07/01 Python
python实现列表中最大最小值输出的示例
2019/07/09 Python
聊聊python在linux下与windows下导入模块的区别说明
2021/03/03 Python
CSS3 @keyframes简单动画实现
2018/02/24 HTML / CSS
中国跨境电商:Tomtop
2017/03/16 全球购物
2014年销售人员工作总结
2014/11/27 职场文书
教师求职自荐信
2015/03/26 职场文书
财务出纳岗位职责
2015/03/31 职场文书
导游词之青岛崂山
2019/12/27 职场文书
Python中常见的导入方式总结
2021/05/06 Python
SpringBoot2零基础到精通之数据与页面响应
2022/03/22 Java/Android