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 相关文章推荐
Windows10下安装MySQL8
Apr 06 MySQL
修改MySQL的数据库引擎为INNODB的方法
May 26 MySQL
MySQL通过binlog恢复数据
May 27 MySQL
Mysql中存储引擎的区别及比较
Jun 04 MySQL
MySQL非空约束(not null)案例讲解
Aug 23 MySQL
防止web项目中的SQL注入
Dec 06 MySQL
分享MySQL常用 内核 Debug 几种常见方法
Mar 17 MySQL
Mysql分析设计表主键为何不用uuid
Mar 31 MySQL
WINDOWS下安装mysql 8.x 的方法图文教程
Apr 19 MySQL
Mysql中常用的join连接方式
May 11 MySQL
Mysql中@和@@符号的详细使用指南
Jun 05 MySQL
手把手带你彻底卸载MySQL数据库
Jun 14 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 抓取网页图片并且另存为的实现代码
2010/03/24 PHP
php 判断访客是否为搜索引擎蜘蛛的函数代码
2011/07/29 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
2014/04/25 PHP
推荐25款php中非常有用的类库
2014/09/29 PHP
CI配置多数据库访问的方法
2016/03/28 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
测试JavaScript字符串处理性能的代码
2009/12/07 Javascript
jQuery EasyUI API 中文文档 - ComboTree组合树
2011/10/11 Javascript
window.onload和$(function(){})的区别介绍
2013/10/30 Javascript
JS控制图片翻转示例代码(兼容firefox,ie,chrome)
2013/12/19 Javascript
jquery $.trim()方法使用介绍
2014/05/21 Javascript
Javascript节点关系实例分析
2015/05/15 Javascript
使用HTML+CSS+JS制作简单的网页菜单界面
2015/07/27 Javascript
Angularjs为ng-click事件传递参数
2017/06/15 Javascript
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
浅谈vue中数据双向绑定的实现原理
2017/09/14 Javascript
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
使用JS获取SessionStorage的值
2018/01/12 Javascript
Javascript实现动态时钟效果
2018/11/17 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
Vue实现点击导航栏当前标签后变色功能
2020/08/19 Javascript
Vue+scss白天和夜间模式切换功能的实现方法
2021/01/05 Vue.js
javascript代码实现简易计算器
2021/01/25 Javascript
Python查看多台服务器进程的脚本分享
2014/06/11 Python
python获取网络图片方法及整理过程详解
2019/12/20 Python
使用IPython或Spyder将省略号表示的内容完整输出
2020/04/20 Python
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
德国BA保镖药房中文网:Bodyguard Apotheke
2021/03/09 全球购物
常用UNIX 命令(Linux的常用命令)
2013/07/10 面试题
新书发布会策划方案
2014/06/09 职场文书
全国优秀教师事迹材料
2014/08/26 职场文书
远程教育学习心得体会
2016/01/23 职场文书
《抽屉原理》教学反思
2016/02/20 职场文书
Pandas数据类型之category的用法
2021/06/28 Python
java协程框架quasar和kotlin中的协程对比分析
2022/02/24 Java/Android