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之高可用集群部署及故障切换实现
Apr 22 MySQL
如何用Navicat操作MySQL
May 12 MySQL
MySql 8.0及对应驱动包匹配的注意点说明
Jun 23 MySQL
MySQL 8.0 驱动与阿里druid版本兼容问题解决
Jul 01 MySQL
通过shell脚本对mysql的增删改查及my.cnf的配置
Jul 07 MySQL
SQL实现LeetCode(178.分数排行)
Aug 04 MySQL
深入解析MySQL索引数据结构
Oct 16 MySQL
MySQL创建定时任务
Jan 22 MySQL
MySQL多表查询机制
Mar 17 MySQL
MySQL读取JSON转换的方式
Mar 18 MySQL
mysql中DCL常用的用户和权限控制
Mar 31 MySQL
MySQL表字段数量限制及行大小限制详情
Jul 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
PHP依赖注入(DI)和控制反转(IoC)详解
2017/06/12 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
setInterval 和 setTimeout会产生内存溢出
2008/02/15 Javascript
传递参数的标准方法(jQuery.ajax)
2008/11/19 Javascript
简单通用的JS滑动门代码
2008/12/19 Javascript
jquery插件开发方法(初学者)
2012/02/03 Javascript
判断客户浏览器是否支持cookie的示例代码
2013/12/23 Javascript
JavaScript-RegExp对象只能使用一次问题解决方法
2014/06/23 Javascript
js中回调函数的学习笔记
2014/07/31 Javascript
关闭页面window.location事件未执行的原因及解决方法
2014/09/01 Javascript
浅析Javascript中“==”与“===”的区别
2014/12/23 Javascript
javascript去除空格方法小结
2015/05/21 Javascript
.NET微信公众号开发之创建自定义菜单
2015/07/16 Javascript
jquery实现全选功能效果的实现代码
2016/05/05 Javascript
javascript内存分配原理实例分析
2017/04/10 Javascript
vue调试工具vue-devtools安装及使用方法
2018/11/07 Javascript
nodejs中各种加密算法的实现详解
2019/07/11 NodeJs
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
2020/10/24 Javascript
10分钟学会js处理json的常用方法
2020/12/06 Javascript
Python决策树分类算法学习
2017/12/22 Python
python中scikit-learn机器代码实例
2018/08/05 Python
Python实现剪刀石头布小游戏(与电脑对战)
2019/12/31 Python
Python TCPServer 多线程多客户端通信的实现
2019/12/31 Python
CSS3中媒体查询结合rem布局适配手机屏幕
2019/06/10 HTML / CSS
香港草莓网土耳其网站:Strawberrynet TR
2017/03/02 全球购物
美国购买肉、鸭、家禽、鹅肝和熟食网站:D’Artagnan
2018/11/13 全球购物
Bibloo荷兰:女士、男士和儿童的服装、鞋子和配饰
2019/02/25 全球购物
二年级小学生评语
2014/04/21 职场文书
促销活动总结
2014/04/28 职场文书
党员服务承诺书
2014/05/28 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
学生违反校规检讨书
2014/10/28 职场文书
小学教师节活动总结
2015/03/20 职场文书
jquery插件实现代码雨特效
2021/04/24 jQuery
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js