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 06 MySQL
Mysql Online DDL的使用详解
May 20 MySQL
QT连接MYSQL数据库的详细步骤
Jul 07 MySQL
使用ORM新增数据在Mysql中的操作步骤
Jul 26 MySQL
MySQL into_Mysql中replace与replace into用法案例详解
Sep 14 MySQL
MySQL数据库索引的最左匹配原则
Nov 20 MySQL
一次SQL如何查重及去重的实战记录
Mar 13 MySQL
mysql 获取时间方式
Mar 20 MySQL
MySQL中一条SQL查询语句是如何执行的
Apr 08 MySQL
MySQL 条件查询的常用操作
Apr 28 MySQL
mysql查找连续出现n次以上的数字
May 11 MySQL
jdbc中自带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
全国FM电台频率大全 - 16 河南省
2020/03/11 无线电
PHP中文分词的简单实现代码分享
2011/07/17 PHP
php之XML转数组函数的详解
2013/06/07 PHP
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
2015/01/04 PHP
php实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
ASP.NET jQuery 实例2 (表单中使用回车在TextBox之间向下移动)
2012/01/13 Javascript
Javascript setInterval的两种调用方法(实例讲解)
2013/11/29 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
2015/08/26 Javascript
JS在一定时间内跳转页面及各种刷新页面的实现方法
2016/05/26 Javascript
JS使用eval()动态创建变量的方法
2016/06/03 Javascript
jQuery实现鼠标跟随效果
2017/02/20 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
webpack的 rquire.context用法实现工程自动化的方法
2020/02/07 Javascript
微信小程序开发数据缓存基础知识辨析及运用实例详解
2020/11/06 Javascript
Vue 数据绑定的原理分析
2020/11/16 Javascript
从零学Python之入门(三)序列
2014/05/25 Python
python中sys.argv参数用法实例分析
2015/05/20 Python
python字符串连接方法分析
2016/04/12 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
2018/01/22 Python
python selenium 获取标签的属性值、内容、状态方法
2018/06/22 Python
解决python3 pika之连接断开的问题
2018/12/18 Python
Django 用户认证组件使用详解
2019/07/23 Python
python删除某个目录文件夹的方法
2020/05/26 Python
英国拖鞋购买网站:Bedroom Athletics
2020/02/28 全球购物
台湾屈臣氏网路商店:Watsons台湾
2020/12/29 全球购物
文明礼仪小标兵事迹
2014/01/12 职场文书
公证书样本
2014/04/10 职场文书
初中学生期末评语
2014/04/24 职场文书
优秀安全员事迹材料
2014/05/11 职场文书
幼儿发展评估方案
2014/06/11 职场文书
销售经理工作失职检讨书
2014/10/24 职场文书
委托函范文
2015/01/29 职场文书
法院答辩状格式
2015/05/22 职场文书
接收函
2019/04/22 职场文书
Ruby使用Mysql2连接操作MySQL
2022/04/19 Ruby