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 相关文章推荐
教你用eclipse连接mysql数据库
Apr 22 MySQL
新手必备之MySQL msi版本下载安装图文详细教程
May 21 MySQL
MySQL为id选择合适的数据类型
Jun 07 MySQL
通过shell脚本对mysql的增删改查及my.cnf的配置
Jul 07 MySQL
MySQL中的隐藏列的具体查看
Sep 04 MySQL
MySQL高级进阶sql语句总结大全
Mar 16 MySQL
利用JuiceFS使MySQL 备份验证性能提升 10 倍
Mar 17 MySQL
如何创建一个创建MySQL数据库中的datetime类型
Mar 21 MySQL
MySQL实战记录之如何快速定位慢SQL
Mar 23 MySQL
一次Mysql update sql不当引起的生产故障记录
Apr 01 MySQL
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
Apr 12 MySQL
单机多实例部署 MySQL8.0.20
May 15 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/12/14 PHP
php 全文搜索和替换的实现代码
2008/07/29 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
PHP设计模式之观察者模式定义与用法示例
2018/08/04 PHP
在Javascript中为String对象添加trim,ltrim,rtrim方法
2006/09/22 Javascript
滚动经典最新话题[prototype框架]下编写
2006/10/03 Javascript
jQuery阻止冒泡和HTML默认操作
2010/11/17 Javascript
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
2016/09/23 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
2017/02/03 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
vue中v-model的应用及使用详解
2018/06/27 Javascript
React Native基础入门之调试React Native应用的一小步
2018/07/02 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
JS实现的简单tab切换功能完整示例
2019/06/20 Javascript
何时/使用 Vue3 render 函数的教程详解
2020/07/25 Javascript
vue 导航菜单刷新状态不消失,显示对应的路由界面操作
2020/08/06 Javascript
[20:39]DOTA2-DPC中国联赛 正赛开幕式 1月18日
2021/03/11 DOTA
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
2016/09/19 Python
Python制作简易注册登录系统
2016/12/15 Python
scrapy爬虫实例分享
2017/12/28 Python
详解PyTorch批训练及优化器比较
2018/04/28 Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
2019/01/23 Python
使用python来调用CAN通讯的DLL实现方法
2019/07/03 Python
Python 基于FIR实现Hilbert滤波器求信号包络详解
2020/02/26 Python
jupyter notebook中美观显示矩阵实例
2020/04/17 Python
Python如何读写二进制数组数据
2020/08/01 Python
CSS3 不定高宽垂直水平居中的几种方式
2020/03/26 HTML / CSS
澳洲CFL商城:CHEMIST FOR LESS(中文)
2021/02/28 全球购物
Java的for语句中break, continue和return的区别
2013/12/19 面试题
奥巴马演讲稿
2014/01/08 职场文书
公务员中国梦演讲稿
2014/08/19 职场文书
群众路线批评与自我批评发言稿
2014/10/16 职场文书
出租车拒载检讨书
2015/01/28 职场文书
民事调解协议书
2016/03/21 职场文书
Java并发编程之详解CyclicBarrier线程同步
2021/06/23 Java/Android