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 用户权限管理实现
May 25 MySQL
MySQL中InnoDB存储引擎的锁的基本使用教程
May 26 MySQL
通过shell脚本对mysql的增删改查及my.cnf的配置
Jul 07 MySQL
关于mysql中时间日期类型和字符串类型的选择
Nov 27 MySQL
全面盘点MySQL中的那些重要日志文件
Nov 27 MySQL
MYSQL如何查看进程和kill进程
Mar 13 MySQL
MySQL如何快速创建800w条测试数据表
Mar 17 MySQL
MySQL索引 高效获取数据的数据结构
May 02 MySQL
MySQL 数据表操作
May 04 MySQL
Mysql数据库事务的脏读幻读及不可重复读详解
May 30 MySQL
mysql数据库隔离级别详解
Jun 16 MySQL
mysql数据库如何转移到oracle
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中设置时区方法小结
2012/06/03 PHP
关于恒等于(===)和非恒等于(!==)
2007/08/20 Javascript
关于js new Date() 出现NaN 的分析
2012/10/23 Javascript
jquery属性过滤选择器使用示例
2013/06/18 Javascript
js为数字添加逗号并格式化数字的代码
2013/08/23 Javascript
JavaScript加强之自定义event事件
2013/09/21 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
2015/08/31 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
2016/04/12 Javascript
JS函数arguments数组获得实际传参数个数的实现方法
2016/05/28 Javascript
详解Javascript中的原型OOP
2016/10/12 Javascript
基于Vue实现支持按周切换的日历
2020/09/24 Javascript
angular4 如何在全局设置路由跳转动画的方法
2017/08/30 Javascript
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
详解vue的数据劫持以及操作数组的坑
2019/04/18 Javascript
vue动态循环出的多个select出现过的变为disabled(实例代码)
2019/11/10 Javascript
Sublime Text3 配置 NodeJs 环境的方法
2020/05/20 NodeJs
vue实现单一筛选、删除筛选条件
2020/10/26 Javascript
python中二维阵列的变换实例
2014/10/09 Python
Python3安装Scrapy的方法步骤
2017/11/23 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
2018/01/29 Python
Python查找两个有序列表中位数的方法【基于归并算法】
2018/04/20 Python
简单了解python字符串前面加r,u的含义
2019/12/26 Python
关于tf.nn.dynamic_rnn返回值详解
2020/01/20 Python
利用PyQt中的QThread类实现多线程
2020/02/18 Python
python3中sorted函数里cmp参数改变详解
2020/03/12 Python
利用CSS3的特性改变文本选中时的颜色
2013/09/11 HTML / CSS
Sephora丝芙兰泰国官方网站:国际知名化妆品购物
2017/11/15 全球购物
shell程序中如何注释
2012/01/28 面试题
应届本科生推荐信范文
2013/12/25 职场文书
八年级英语教学反思
2014/01/09 职场文书
财务简历的自我评价
2014/03/05 职场文书
俄语专业毕业生求职信
2014/07/12 职场文书
感恩教育观后感
2015/06/17 职场文书
vue elementUI批量上传文件
2022/04/26 Vue.js
讲解Python实例练习逆序输出字符串
2022/05/06 Python
Python 绘制多因子柱状图
2022/05/11 Python