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 相关文章推荐
Windows10下安装MySQL8
Apr 06 MySQL
MySQL 覆盖索引的优点
May 19 MySQL
修改MySQL的数据库引擎为INNODB的方法
May 26 MySQL
一文读懂navicat for mysql基础知识
May 31 MySQL
MySQL 8.0 Online DDL快速加列的相关总结
Jun 02 MySQL
MySQL中in和exists区别详解
Jun 03 MySQL
Mysql忘记密码解决方法
Feb 12 MySQL
MySQL 开窗函数
Feb 15 MySQL
MySQL派生表联表查询实战过程
Mar 20 MySQL
CentOS MySql8 远程连接实战
Apr 19 MySQL
mysql中如何用命令创建联合唯一索引
Apr 20 MySQL
MySQL 自动填充 create_time 和 update_time
May 20 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
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
php数组转成json格式的方法
2015/03/09 PHP
禁止F5等快捷键的JS代码
2007/03/06 Javascript
JQuery的ajax获取数据后的处理总结(html,xml,json)
2010/07/14 Javascript
分享10篇优秀的jQuery幻灯片制作教程及应用案例
2011/04/16 Javascript
cument.execCommand()用法深入理解
2012/12/04 Javascript
js动态设置鼠标事件示例代码
2013/10/30 Javascript
用javascript为页面添加天气显示实现思路及代码
2013/12/02 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
原生JS发送异步数据请求
2017/06/08 Javascript
详解在React里使用"Vuex"
2018/04/02 Javascript
javascript、php关键字搜索函数的使用方法
2018/05/29 Javascript
React组件重构之嵌套+继承及高阶组件详解
2018/07/19 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
Python编程入门的一些基本知识
2015/05/13 Python
详解python之简单主机批量管理工具
2017/01/27 Python
python3.6+django2.0开发一套学员管理系统
2018/03/03 Python
python学生信息管理系统
2018/03/13 Python
python 使用正则表达式按照多个空格分割字符的实例
2018/12/20 Python
Python使用requests提交HTTP表单的方法
2018/12/26 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
2019/05/16 Python
python被修饰的函数消失问题解决(基于wraps函数)
2019/11/04 Python
Django DRF认证组件流程实现原理详解
2020/08/17 Python
中专生职业生涯规划书范文
2014/01/10 职场文书
一份婚庆公司创业计划书
2014/01/11 职场文书
房地产财务管理制度
2014/02/02 职场文书
个人承诺书怎么写
2014/05/24 职场文书
党员学习正风肃纪思想汇报
2014/09/12 职场文书
优秀班主任主要事迹材料
2014/12/16 职场文书
经典导游欢迎词
2015/01/26 职场文书
小学毕业感言100字
2015/07/30 职场文书
《最后一头战象》教学反思
2016/02/16 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
django 认证类配置实现
2021/11/11 Python
前端canvas中物体边框和控制点的实现示例
2022/08/05 Javascript