⭐️ LeetCode解题系列 ⭐️ 176. 第二高的薪水(Oracle dense_rank 和 max)
Posted Lucifer三思而后行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了⭐️ LeetCode解题系列 ⭐️ 176. 第二高的薪水(Oracle dense_rank 和 max)相关的知识,希望对你有一定的参考价值。
176. 第二高的薪水
❤️ 原题 ❤️
编写一个 SQL 查询,获取 Employee
表中第二高的薪水(Salary) 。
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
例如上述 Employee
表,SQL查询应该返回 200
作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200 |
+---------------------+
⭐️ 解题思路 ⭐️
本题是需要求第二高的薪水,还算是比较简单的题目了,我写了两种解法。
思路一
由于最近刷的 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;
思路二
首先使用 max
函数排除第一高的薪水记录,然后再取最高的薪水,即为第二高薪水,思路清晰。
SELECT nvl(MAX(salary),
NULL) AS "SecondHighestSalary"
FROM employee
WHERE salary <> (SELECT MAX(salary)
FROM employee);
LeetCode 执行一下看看结果吧:
❄️ 写在最后 ❄️
本题需要注意的是,没有第二高薪水的时候如何处理?假设只有一条记录,那么就需要用 nvl
参数来处理,当没有记录时,返回 null
。
本次分享到此结束啦~
如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持,你的支持就是我创作最大的动力。
以上是关于⭐️ LeetCode解题系列 ⭐️ 176. 第二高的薪水(Oracle dense_rank 和 max)的主要内容,如果未能解决你的问题,请参考以下文章
⭐️ LeetCode解题系列 ⭐️ 177. 第N高的薪水(Oracle dense_rank函数)
⭐️ LeetCode解题系列 ⭐️ 177. 第N高的薪水(Oracle dense_rank函数)
⭐️ LeetCode解题系列 ⭐️ 175. 组合两个表(Oracle 简单的左右连接)
⭐️ LeetCode解题系列 ⭐️ 175. 组合两个表(Oracle 简单的左右连接)