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 11 MySQL
详解MySQL数据库千万级数据查询和存储
May 18 MySQL
你知道哪几种MYSQL的连接查询
Jun 03 MySQL
Mysql 设置boolean类型的操作
Jun 04 MySQL
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
Jun 26 MySQL
MySQL数据库必备之条件查询语句
Oct 15 MySQL
Mysql超详细讲解死锁问题的理解
Apr 01 MySQL
MySQL分区以及建索引的方法总结
Apr 13 MySQL
MySQL数据库中的锁、解锁以及删除事务
May 06 MySQL
MySQL查询日期时间
May 15 MySQL
MySQL详解进行JDBC编程与增删改查方法
Jun 16 MySQL
MySQL深分页问题解决思路
Dec 24 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制作图型计数器的例子
2006/10/09 PHP
基于HTTP长连接的"服务器推"技术的php 简易聊天室
2009/10/31 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
js批量设置样式的三种方法不推荐使用with
2013/02/25 Javascript
javascript标签在页面中的位置探讨
2013/04/11 Javascript
javascript 得到文件后缀名的思路及实现
2020/05/09 Javascript
基于jquery的simpleValidate简易验证插件
2014/01/31 Javascript
javascript页面上使用动态时间具体实现
2014/03/18 Javascript
javascript封装 Cookie 应用接口
2015/08/07 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
简要了解jQuery移动web开发的响应式布局设计
2015/12/04 Javascript
jQuery实现返回顶部功能
2016/02/23 Javascript
jQuery的内容过滤选择器学习教程
2016/04/18 Javascript
原生JS+CSS实现炫酷重力模拟弹跳系统的登录页面
2017/11/01 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
jQuery+PHP实现上传裁剪图片
2020/06/29 jQuery
vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作
2020/07/27 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
[01:38]DOTA2辉夜杯 欢乐的观众现场采访
2015/12/26 DOTA
python计算一个序列的平均值的方法
2015/07/11 Python
Python实现的密码强度检测器示例
2017/08/23 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
Python进阶学习之特殊方法实例详析
2017/12/01 Python
Python中pandas模块DataFrame创建方法示例
2018/06/20 Python
python tkinter图形界面代码统计工具(更新)
2019/09/18 Python
深入浅析Python科学计算库Scipy及安装步骤
2019/10/12 Python
详解Python list和numpy array的存储和读取方法
2019/11/06 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
2020/01/24 Python
Python爬虫获取豆瓣电影并写入excel
2020/07/31 Python
HTML5 图片悬停放大的实现代码示例
2019/12/04 HTML / CSS
西班牙在线宠物商店:zooplus.es
2017/02/24 全球购物
美国知名生活购物网站:Goop
2017/11/03 全球购物
介绍一下linux的文件权限
2014/07/20 面试题
项目建议书怎么写
2014/05/15 职场文书
庆国庆活动总结
2014/08/28 职场文书
详解CSS开发过程中的20个快速提升技巧
2021/05/21 HTML / CSS