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 root密码的重置方法
Apr 21 MySQL
MySQL分库分表与分区的入门指南
Apr 22 MySQL
MySQL数据迁移相关总结
Apr 29 MySQL
Mysql数据库命令大全
May 26 MySQL
MySQL查看表和清空表的常用命令总结
May 26 MySQL
MySQL开启事务的方式
Jun 26 MySQL
解决mysql的int型主键自增问题
Jul 15 MySQL
MYSQL 运算符总结
Nov 11 MySQL
MySQL三种方式实现递归查询
Apr 18 MySQL
MySQL数据库 任意ip连接方法
May 20 MySQL
mysql中关键词exists的用法实例详解
Jun 10 MySQL
关于mysql中string和number的转换问题
Jun 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中修改浏览器的User-Agent来伪装你的浏览器和操作系统
2011/07/29 PHP
PHP中文乱码解决方案
2015/03/05 PHP
php使用curl通过代理获取数据的实现方法
2016/05/16 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
2017/04/07 PHP
jquery的ajax()函数传值中文乱码解决方法介绍
2012/11/08 Javascript
Javascript中Event属性搜集整理
2013/09/17 Javascript
javascript 中that的含义示例介绍
2014/05/14 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
AngularJS入门教程之链接与图片模板详解
2016/08/19 Javascript
javascript数字验证的实例代码(推荐)
2016/08/20 Javascript
JSON 对象未定义错误的解决方法
2016/09/29 Javascript
JSON与JS对象的区别与对比
2017/03/01 Javascript
JS图片预加载插件详解
2017/06/21 Javascript
谈谈VUE种methods watch和compute的区别和联系
2017/08/01 Javascript
js删除数组中的元素delete和splice的区别详解
2018/02/03 Javascript
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
2018/02/26 Javascript
Vue程序调试的方法
2019/06/17 Javascript
[03:47]2015国际邀请赛第三日现场精彩回顾
2015/08/08 DOTA
Python+matplotlib绘制不同大小和颜色散点图实例
2018/01/19 Python
深入flask之异步非堵塞实现代码示例
2018/07/31 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
使用Python实现正态分布、正态分布采样
2019/11/20 Python
Python内置类型性能分析过程实例
2020/01/29 Python
Django中的session用法详解
2020/03/09 Python
详解html5 postMessage解决跨域通信的问题
2018/08/17 HTML / CSS
Shell如何接收变量输入
2012/09/24 面试题
公司综合部的成员自我评价分享
2013/11/05 职场文书
九年级语文教学反思
2014/02/04 职场文书
会计电算化大学生职业规划书
2014/02/05 职场文书
《月球之谜》教学反思
2014/04/10 职场文书
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书
致青春观后感
2015/06/09 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书
Vue实现跑马灯样式文字横向滚动
2021/11/23 Vue.js
Tomcat配置访问日志和线程数
2022/05/06 Servers