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 相关文章推荐
解读MySQL的客户端和服务端协议
May 10 MySQL
MySQL 分页查询的优化技巧
May 12 MySQL
Mysql效率优化定位较低sql的两种方式
May 26 MySQL
MySQL中in和exists区别详解
Jun 03 MySQL
MySQL非空约束(not null)案例讲解
Aug 23 MySQL
MySQL定时备份数据库(全库备份)的实现
Sep 25 MySQL
mysql insert 存在即不插入语法说明
Mar 25 MySQL
mysql 排序失效
May 20 MySQL
Mysql 一主多从的部署
May 20 MySQL
MySQL安装失败的原因及解决步骤
Jun 14 MySQL
MySQL transaction事务安全示例讲解
Jun 21 MySQL
MySQL 原理优化之Group By的优化技巧
Aug 14 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
php中通过正则表达式下载内容中的远程图片的函数代码
2012/01/10 PHP
mongodb和php的用法详解
2019/03/25 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
2020/04/23 PHP
document.all还是document.getElementsByName?
2006/07/21 Javascript
脚本吧 - 幻宇工作室用到js,超强推荐base.js
2006/12/23 Javascript
jquery DOM操作 基于命令改变页面
2010/05/06 Javascript
JavaScript学习笔记记录我的旅程
2012/05/23 Javascript
判断滚动条到底部的JS代码
2013/11/04 Javascript
jquery实现右键菜单插件
2015/03/29 Javascript
js光标定位文本框回车表单提交问题的解决方法
2015/05/11 Javascript
实例讲解javascript注册事件处理函数
2016/01/09 Javascript
详解用vue编写弹出框组件
2017/07/04 Javascript
200行代码实现blockchain 区块链实例详解
2018/03/14 Javascript
详解JavaScript的数据类型以及数据类型的转换
2019/04/20 Javascript
Vue实现回到顶部和底部动画效果
2019/07/31 Javascript
vue组件命名和props命名代码详解
2019/09/01 Javascript
Vue v-model组件封装(类似弹窗组件)
2020/01/08 Javascript
详细分析React 表单与事件
2020/07/08 Javascript
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
github配置使用指南
2014/11/18 Python
Python基于pillow判断图片完整性的方法
2016/09/18 Python
python爬虫 execjs安装配置及使用
2019/07/30 Python
基于Python2、Python3中reload()的不同用法介绍
2019/08/12 Python
Python csv模块使用方法代码实例
2019/08/29 Python
Python hmac模块使用实例解析
2019/12/24 Python
浅谈pytorch、cuda、python的版本对齐问题
2020/01/15 Python
python实现在列表中查找某个元素的下标示例
2020/11/16 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
2021/01/15 Python
python爬虫利用代理池更换IP的方法步骤
2021/02/21 Python
CSS3 特效范例整理
2011/08/22 HTML / CSS
英国标准协会商店:BSI Shop
2019/02/25 全球购物
临床医师专业个人自我评价
2014/01/08 职场文书
镇党政领导班子民主生活会思想汇报
2014/10/11 职场文书
交通事故被告代理词
2015/05/23 职场文书
婚宴致辞
2015/07/28 职场文书
浅谈Redis中的RDB快照
2021/06/29 Redis