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 10 MySQL
MySQL 覆盖索引的优点
May 19 MySQL
Mysql基础知识点汇总
May 26 MySQL
MySQL查看表和清空表的常用命令总结
May 26 MySQL
MySQL8.0.18配置多主一从
Jun 21 MySQL
浅谈MySQL函数
Oct 05 MySQL
MySQL对数据表已有表进行分区表的实现
Nov 01 MySQL
一次SQL如何查重及去重的实战记录
Mar 13 MySQL
mysql实现将字符串字段转为数字排序或比大小
Jun 14 MySQL
mysql函数之截取字符串的实现
Aug 14 MySQL
mysql通过group by分组取最大时间对应数据的两种有效方法
Sep 23 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
利用PHP和AJAX创建RSS聚合器的代码
2007/03/13 PHP
php项目打包方法
2008/02/18 PHP
header导出Excel应用示例
2014/01/24 PHP
PHP中define() 与 const定义常量的区别详解
2019/06/25 PHP
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
浅谈js的异步执行
2016/10/18 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
2016/12/08 Javascript
js实现文字选中分享功能
2017/01/25 Javascript
canvas雪花效果核心代码分享
2017/02/19 Javascript
详解vue.js全局组件和局部组件
2017/04/10 Javascript
微信小程序的生命周期的详解
2017/10/19 Javascript
Angular @HostBinding()和@HostListener()用法
2018/03/05 Javascript
如何在JavaScript中优雅的提取循环内数据详解
2019/03/04 Javascript
Vue实现日历小插件
2019/06/26 Javascript
JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
2019/07/23 Javascript
vue中使用GraphQL的实例代码
2019/11/04 Javascript
小程序简单两栏瀑布流效果的实现
2019/12/18 Javascript
Vue表单控件数据绑定方法详解
2020/02/05 Javascript
Python实现将sqlite数据库导出转成Excel(xls)表的方法
2017/07/17 Python
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
新手入门Python编程的8个实用建议
2019/07/12 Python
Python面向对象之多态原理与用法案例分析
2019/12/30 Python
python 解压、复制、删除 文件的实例代码
2020/02/26 Python
python3利用Axes3D库画3D模型图
2020/03/25 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
2020/06/23 Python
绝对令人的惊叹的CSS3折叠效果(3D效果)整理
2012/12/30 HTML / CSS
房地产公司见习自我鉴定
2014/04/28 职场文书
3分钟演讲稿
2014/04/30 职场文书
优秀毕业生就业推荐信
2014/05/22 职场文书
2015年元旦标语大全
2014/12/09 职场文书
酒店工程部经理岗位职责
2015/04/09 职场文书
2015年办公室文秘工作总结
2015/04/30 职场文书
用Python爬取英雄联盟的皮肤详细示例
2021/12/06 Python
关于CSS自定义属性与前端页面的主题切换问题
2022/03/21 HTML / CSS
大型强子对撞机再次重启探索“第五种自然力”
2022/04/29 数码科技
win11怎么消除图标小盾牌?win11消除图标小盾牌解决方法
2022/08/05 数码科技