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 31 MySQL
一文读懂navicat for mysql基础知识
May 31 MySQL
Mysql数据库值的添加、修改、删除及清空操作实例
Jun 20 MySQL
为什么MySQL分页用limit会越来越慢
Jul 25 MySQL
Prometheus 监控MySQL使用grafana展示
Aug 30 MySQL
mysql timestamp比较查询遇到的坑及解决
Nov 27 MySQL
SQL注入详解及防范方法
Dec 06 MySQL
Arthas排查Kubernetes中应用频繁挂掉重启异常
Feb 28 MySQL
MYSQL如何查看进程和kill进程
Mar 13 MySQL
MySQL 分区表中分区键为什么必须是主键的一部分
Mar 17 MySQL
MySql如何将查询的出来的字段进行转换
Jun 14 MySQL
MySQL下载安装配置详细教程 附下载资源
Sep 23 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
《猛禽小队》:DC宇宙的又一超级大烂片
2020/04/09 欧美动漫
深入分析php中接口与抽象类的区别
2013/06/08 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
PHP编程计算日期间隔天数的方法
2017/04/26 PHP
JavaScript 不只是脚本
2007/05/30 Javascript
最短的IE判断代码
2011/03/13 Javascript
Js 去掉字符串中的空格(实现代码)
2013/11/19 Javascript
JavaScript必知必会(二) null 和undefined
2016/06/08 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
微信小程序 加载 app-service.js 错误解决方法
2016/10/12 Javascript
微信小程序 网络请求(post请求,get请求)
2017/01/17 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
2017/04/24 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
2017/04/26 Javascript
JavaScript实现随机数生成器(去重)
2017/10/13 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
2018/08/31 Javascript
了解JavaScript中let语句
2019/05/30 Javascript
原生javascript实现类似vue的数据绑定功能示例【观察者模式】
2020/02/24 Javascript
如何解决vue在ios微信"复制链接"功能问题
2020/03/26 Javascript
vue-cli3配置favicon.ico和title的流程
2020/10/27 Javascript
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
[01:04:35]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第一场
2018/04/04 DOTA
Pipenv一键搭建python虚拟环境的方法
2018/05/22 Python
python实现给微信指定好友定时发送消息
2019/04/29 Python
python多进程间通信代码实例
2019/09/30 Python
利用python实现冒泡排序算法实例代码
2019/12/01 Python
详解Python在使用JSON时需要注意的编码问题
2019/12/06 Python
使用 Python 遍历目录树的方法
2020/02/29 Python
python实现人像动漫化的示例代码
2020/05/17 Python
加拿大领先的时尚和体育零售商:Sporting Life
2019/12/15 全球购物
应聘面试自我评价
2014/01/24 职场文书
宣传部部长竞选演讲稿
2014/04/26 职场文书
广场舞大赛策划方案
2014/05/31 职场文书
财政专业大学生职业生涯规划书
2014/09/17 职场文书
2014年酒店前台工作总结
2014/11/14 职场文书
优秀班组事迹材料
2014/12/24 职场文书
2016年党课培训学习心得体会
2016/01/07 职场文书