SQL实现LeetCode(177.第N高薪水)


Posted in MySQL onAugust 04, 2021

[LeetCode] 177.Nth Highest Salary 第N高薪水

Write a SQL query to get the nth highest salary from the Employee table.

+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+

For example, given the above Employee table, the nth highest salary where n = 2 is 200. If there is no nth highest salary, then the query should return null.

这道题是之前那道Second Highest Salary的拓展,根据之前那道题的做法,我们可以很容易的将其推展为N,根据对Second Highest Salary中解法一的分析,我们只需要将OFFSET后面的1改为N-1就行了,但是这样MySQL会报错,估计不支持运算,那么我们可以在前面加一个SET N = N - 1,将N先变成N-1再做也是一样的:

解法一:

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  SET N = N - 1;
  RETURN (
      SELECT DISTINCT Salary FROM Employee GROUP BY Salary
      ORDER BY Salary DESC LIMIT 1 OFFSET N
  );
END

根据对Second Highest Salary中解法四的分析,我们只需要将其1改为N-1即可,这里却支持N-1的计算,参见代码如下:

解法二:

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  RETURN (
      SELECT MAX(Salary) FROM Employee E1
      WHERE N - 1 =
      (SELECT COUNT(DISTINCT(E2.Salary)) FROM Employee E2
      WHERE E2.Salary > E1.Salary)
  );
END

当然我们也可以通过将最后的>改为>=,这样我们就可以将N-1换成N了:

解法三:

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  RETURN (
      SELECT MAX(Salary) FROM Employee E1
      WHERE N =
      (SELECT COUNT(DISTINCT(E2.Salary)) FROM Employee E2
      WHERE E2.Salary >= E1.Salary)
  );
END

类似题目:

Second Highest Salary

参考资料:

https://leetcode.com/discuss/88875/simple-answer-with-limit-and-offset

https://leetcode.com/discuss/63183/fastest-solution-without-using-order-declaring-variables

到此这篇关于SQL实现LeetCode(177.第N高薪水)的文章就介绍到这了,更多相关SQL实现第N高薪水内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
多表查询、事务、DCL
Apr 05 MySQL
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
May 06 MySQL
MySQL 时间类型的选择
Jun 05 MySQL
MySQL为id选择合适的数据类型
Jun 07 MySQL
MySQL 5.7常见数据类型
Jul 15 MySQL
MySQL深度分页(千万级数据量如何快速分页)
Jul 25 MySQL
mysql的数据压缩性能对比详情
Nov 07 MySQL
MySQL日期时间函数知识汇总
Mar 17 MySQL
MySQL的存储过程和相关函数
Apr 26 MySQL
Mysql 数据库中的 redo log 和 binlog 写入策略
Apr 26 MySQL
详解Mysq MVCC多版本的并发控制
Apr 29 MySQL
Mysql中@和@@符号的详细使用指南
Jun 05 MySQL
MySQL千万级数据表的优化实战记录
Aug 04 #MySQL
SQL实现LeetCode(176.第二高薪水)
Aug 04 #MySQL
Mysql8.0递归查询的简单用法示例
Aug 04 #MySQL
SQL之各种join小结详细讲解
SQL实现LeetCode(175.联合两表)
Aug 04 #MySQL
一篇文章带你深入了解Mysql触发器
Aug 02 #MySQL
sql注入教程之类型以及提交注入
You might like
利用static实现表格的颜色隔行显示的代码
2007/09/02 PHP
PHP DataGrid 实现代码
2009/08/12 PHP
php多文件上传实现代码
2014/02/20 PHP
Yii框架的redis命令使用方法简单示例
2019/10/15 PHP
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
2010/05/25 Javascript
extjs每个组件要设置唯一的ID否则会出错
2014/06/15 Javascript
jQuery打印图片pdf、txt示例代码
2014/07/22 Javascript
javascript动态添加删除tabs标签的方法
2015/07/06 Javascript
Bootstrap网格系统详解
2016/04/26 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
2016/10/27 Javascript
jQuery手指滑动轮播效果
2016/12/22 Javascript
vue.js 左侧二级菜单显示与隐藏切换的实例代码
2017/05/23 Javascript
JavaScript之iterable_动力节点Java学院整理
2017/06/29 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
2018/05/15 NodeJs
JavaScript继承与多继承实例分析
2018/05/26 Javascript
Vue实现购物车实例代码两则
2020/05/30 Javascript
JavaScript实现缓动动画
2020/11/25 Javascript
JS实现超级好看的鼠标小尾巴特效
2020/12/01 Javascript
python判断端口是否打开的实现代码
2013/02/10 Python
python实现在控制台输入密码不显示的方法
2015/07/02 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
2018/01/16 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
2018/08/10 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
python实现贪吃蛇双人大战
2020/04/18 Python
Python项目打包成二进制的方法
2020/12/30 Python
CSS3实现头像旋转效果
2017/03/13 HTML / CSS
英国家电直销:Appliances Direct
2016/09/22 全球购物
俄罗斯GamePark游戏商店网站:购买游戏、游戏机和配件
2020/03/13 全球购物
介绍一下gcc特性
2015/10/31 面试题
农业大学毕业生的个人自我评价
2013/10/11 职场文书
银行职员思想汇报
2013/12/31 职场文书
教学个人的自我评价分享
2014/02/16 职场文书
个人欠款担保书
2014/05/20 职场文书
MySQL 8.0 之不可见列的基本操作
2021/05/20 MySQL