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 使用SQL语句修改表名的实现
Apr 07 MySQL
为什么mysql字段要使用NOT NULL
May 13 MySQL
MySQL 全文检索的使用示例
Jun 07 MySQL
mysql如何配置白名单访问
Jun 30 MySQL
MySQL系列之十三 MySQL的复制
Jul 02 MySQL
MySQL令人大跌眼镜的隐式转换
Aug 23 MySQL
面试中老生常谈的MySQL问答集锦夯实基础
Mar 13 MySQL
MySQL视图概念以及相关应用
Apr 19 MySQL
MySQL数据库如何查看表占用空间大小
Jun 10 MySQL
MySQL约束(创建表时的各种条件说明)
Jun 21 MySQL
MySQL事务的隔离级别详情
Jul 15 MySQL
MySQL count(*)统计总数问题汇总
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
PHP分页效率终结版(推荐)
2013/07/01 PHP
php mail to 配置详解
2014/01/16 PHP
php和jquery实现地图区域数据统计展示数据示例
2014/02/12 PHP
php导出word文档与excel电子表格的简单示例代码
2014/03/08 PHP
PHP实现事件机制的方法
2015/07/10 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
2017/04/26 PHP
利用jquery操作select下拉列表框的代码
2010/06/04 Javascript
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
2010/06/25 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
JavaScript实现动态创建CSS样式规则方案
2014/09/06 Javascript
JS简单计算器实例
2015/01/20 Javascript
JS+CSS实现Li列表隔行换色效果的方法
2015/02/16 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
2015/11/30 Javascript
js判断当前页面在移动设备还是在PC端中打开
2016/01/06 Javascript
jQuery实现简单隔行变色的方法
2016/02/20 Javascript
HTML5+JS+JQuery+ECharts实现异步加载问题
2017/12/16 jQuery
全面了解JavaScript的作用域链
2019/04/03 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
2019/11/25 Javascript
JavaScript实现字符串与HTML格式相互转换
2020/03/17 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
2020/08/05 Javascript
搞笑的程序猿:看看你是哪种Python程序员
2015/06/12 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
2017/08/30 Python
python 利用pyttsx3文字转语音过程详解
2019/09/25 Python
用python的turtle模块实现给女票画个小心心
2019/11/23 Python
Python识别html主要文本框过程解析
2020/02/18 Python
python实现简单井字棋游戏
2020/03/04 Python
从python读取sql的实例方法
2020/07/21 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
2020/10/09 Python
小区物业门卫岗位职责
2014/04/10 职场文书
厕所文明标语
2014/06/11 职场文书
电子银行业务授权委托书
2014/10/10 职场文书
反邪教警示教育活动总结
2015/05/09 职场文书
九不准学习心得体会
2016/01/23 职场文书
Python中相见恨晚的技巧
2021/04/13 Python
jQuery实现广告显示和隐藏动画
2021/07/04 jQuery
Redis三种集群模式详解
2021/10/05 Redis