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_mode的使用详解
May 08 MySQL
详解MySQL数据库千万级数据查询和存储
May 18 MySQL
浅谈mysql返回Boolean类型的几种情况
Jun 04 MySQL
mysql中between的边界,范围说明
Jun 08 MySQL
MySQL连表查询分组去重的实现示例
Jul 01 MySQL
SQL语法CONSTRAINT约束操作详情
Jan 18 MySQL
MySQL的索引你了解吗
Mar 13 MySQL
实战 快速定位MySQL的慢SQL
Mar 22 MySQL
Innodb存储引擎中的后台线程详解
Apr 03 MySQL
解决MySQL Varchar 类型尾部空格的问题
Apr 06 MySQL
mysql如何查询连续记录
May 11 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
Zend引擎的发展 [15]
2006/10/09 PHP
PHP @ at 记号的作用示例介绍
2014/10/10 PHP
基于PHP实现用户注册登录功能
2016/10/14 PHP
PHPMAILER实现PHP发邮件功能
2018/04/18 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
CI框架实现创建自定义类库的方法
2018/12/25 PHP
php判断目录存在的简单方法
2019/09/26 PHP
use jscript List Installed Software
2007/06/11 Javascript
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
Javascript 构造函数,公有,私有特权和静态成员定义方法
2009/11/30 Javascript
TextArea 控件的最大长度问题(js json)
2009/12/16 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
2013/08/05 Javascript
表单提交前触发函数返回true表单才会提交
2014/03/11 Javascript
jquery的总体架构分析及实现示例详解
2014/11/08 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
2016/03/11 Javascript
jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
2016/04/29 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
JS中关于事件处理函数名后面是否带括号的问题
2016/11/16 Javascript
推荐三款日期选择插件(My97DatePicker、jquery.datepicker、Mobiscroll)
2017/04/21 jQuery
Node实战之不同环境下配置文件使用教程
2018/01/02 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
2019/11/04 Javascript
js的Object.assign用法示例分析
2020/03/05 Javascript
Python爬虫_城市公交、地铁站点和线路数据采集实例
2018/01/10 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
matplotlib更改窗口图标的方法示例
2021/02/03 Python
CSS3制作圆形滚动进度条动画的示例
2020/11/05 HTML / CSS
英国领先的狗和宠物美容专家:Christies Direct
2017/04/03 全球购物
Booking.com美国:全球酒店预订网站
2017/04/18 全球购物
2014年应届大学生自我评价
2014/01/09 职场文书
阳光体育活动方案
2014/02/16 职场文书
员工试用期自我评价
2014/09/18 职场文书
2015年教学管理工作总结
2015/05/20 职场文书
毕业答辩开场白范文
2015/05/27 职场文书
中学后勤工作总结2015
2015/07/22 职场文书
大学入学感言
2015/08/01 职场文书