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官方导出工具mysqlpump的使用
May 21 MySQL
MySQL 使用事件(Events)完成计划任务
May 24 MySQL
mysql中between的边界,范围说明
Jun 08 MySQL
mysql left join快速转inner join的过程
Jun 30 MySQL
mysql脏页是什么
Jul 26 MySQL
Mysql实现简易版搜索引擎的示例代码
Aug 30 MySQL
mysql配置SSL证书登录的实现
Sep 04 MySQL
MySQL 数据类型详情
Nov 11 MySQL
利用JuiceFS使MySQL 备份验证性能提升 10 倍
Mar 17 MySQL
navicat 连接Ubuntu虚拟机的mysql的操作方法
Apr 02 MySQL
Mysql 8.x 创建用户以及授予权限的操作记录
Apr 18 MySQL
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
Sep 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
PHP中用hash实现的数组
2011/07/17 PHP
深入php常用函数的使用汇总
2013/06/08 PHP
详解PHP中的 input属性(隐藏 只读 限制)
2017/08/14 PHP
php项目中类的自动加载实例讲解
2019/09/12 PHP
禁止JQuery中的load方法装载IE缓存中文件的方法
2009/09/11 Javascript
收集的一些Array及String原型对象的扩展实现代码
2010/12/05 Javascript
javascript和HTML5利用canvas构建猜牌游戏实现算法
2013/07/17 Javascript
js定时调用方法成功后并停止调用示例
2014/04/08 Javascript
JavaScript中读取和保存文件实例
2014/05/08 Javascript
JavaScript获取当前运行脚本文件所在目录的方法
2016/02/03 Javascript
详解jQuery中的empty、remove和detach
2016/04/11 Javascript
JS实现的多张图片轮流播放幻灯片效果
2016/07/22 Javascript
vue中实现图片和文件上传的示例代码
2018/03/16 Javascript
layui使用templet格式化表格数据的方法
2019/09/16 Javascript
JavaScript如何处理移动端拍摄图片旋转问题
2019/11/16 Javascript
vuecli3.x中轻松4步带你使用tinymce的步骤
2020/06/25 Javascript
[53:15]Newbee vs Pain 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python实现socket客户端和服务端简单示例
2014/02/24 Python
简单介绍Python中的几种数据类型
2016/01/02 Python
Python实现完整的事务操作示例
2017/06/20 Python
Python随机生成均匀分布在单位圆内的点代码示例
2017/11/13 Python
Django中数据库的数据关系:一对一,一对多,多对多
2018/10/21 Python
python利用百度AI实现文字识别功能
2018/11/27 Python
Python的条件表达式和lambda表达式实例
2019/01/31 Python
python绘制随机网络图形示例
2019/11/21 Python
Python.append()与Python.expand()用法详解
2019/12/18 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
python 安装移动复制第三方库操作
2020/07/13 Python
python 获取谷歌浏览器保存的密码
2021/01/06 Python
尼克松手表官网:Nixon手表
2019/03/17 全球购物
一套比较完整的软件测试人员面试题
2012/05/13 面试题
旅游与酒店管理的自我评价分享
2013/11/03 职场文书
学校施工安全责任书
2015/01/29 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
2019让人心动的商业计划书
2019/06/27 职场文书
win11开机发生死循环重启怎么办?win11开机发生死循环重启解决方法
2022/08/05 数码科技