⭐️ LeetCode解题系列 ⭐️ 176. 第二高的薪水(Oracle dense_rank 和 max)

举报
Lucifer三思而后行 发表于 2021/08/06 23:21:02 2021/08/06
【摘要】 176. 第二高的薪水(Oracle dense_rank 和 max)



❤️ 原题 ❤️

编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。

+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100 |
| 2  | 200 |
| 3  | 300 |
+----+--------+
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。

+---------------------+
| SecondHighestSalary |
+---------------------+
| 200 |
+---------------------+
  • 1
  • 2
  • 3
  • 4
  • 5

⭐️ 解题思路 ⭐️

本题是需要求第二高的薪水,还算是比较简单的题目了,我写了两种解法。

思路一

由于最近刷的 dense_rank() 函数比较多,第一反应就是这个思路,试了下,可以解出来,但是执行效果比较差:

SELECT nvl((SELECT t.salary FROM (SELECT DISTINCT salary, dense_rank() over(ORDER BY salary DESC) dr FROM employee) t WHERE t.dr = 2), NULL) AS "SecondHighestSalary"
  FROM dual;

  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

思路二

首先使用 max 函数排除第一高的薪水记录,然后再取最高的薪水,即为第二高薪水,思路清晰。

SELECT nvl(MAX(salary), NULL) AS "SecondHighestSalary"
  FROM employee
 WHERE salary <> (SELECT MAX(salary) FROM employee);

  
  • 1
  • 2
  • 3
  • 4
  • 5

LeetCode 执行一下看看结果吧:
在这里插入图片描述

❄️ 写在最后 ❄️

本题需要注意的是,没有第二高薪水的时候如何处理?假设只有一条记录,那么就需要用 nvl 参数来处理,当没有记录时,返回 null


本次分享到此结束啦~

如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持,你的支持就是我创作最大的动力。

文章来源: blog.csdn.net,作者:Lucifer三思而后行,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/m0_50546016/article/details/119354480

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。