边儿上的小人您要嫌碍事儿,可将鼠标放在上头,边上底下有个叉,点一下就收起来了

【力扣精选】Oracle SQL 176. 第二高的薪水

【力扣精选】Oracle SQL 176. 第二高的薪水

这道题很适合用来作为窗口函数的入门使用练习
链接如下:
https://leetcode.cn/problems/second-highest-salary/description/

image

获取并返回 Employee 表中第二高的薪水 。如果不存在第二高的薪水,查询应该返回 null 。

如果不使用窗口函数的话,肯定也可以写出来,比如针对题目,直接比较出最大值,然后去掉最大值,那么剩下的一定是第二大的值

方法很多很多,这里可以使用窗口函数dense_rank()over()

--Oracle常用分组排序窗口函数
rank() over(order by score desc)   --按照大小进行排名,纯粹的排名,相同大小名次一样,会有名次的跳跃,即除了相同的,其余排名顺序与行号相同,第一名有十个,那第十一个就是第十一名
dense_rank() over(order by score desc)  --按照大小进行排名,相同大小名次一样,但是不会进行名次的跳跃,即第一名玩了就是第二名,就算第一名有十个,那第十一个也是第二名
row_number() over(order by score desc)  --按照大小进行排名,相同大小名次不一样,就是按照行号走下去

结果可以参考下面的情况,直接对窗口函数的结果进行=2的操作,使用nvl,如果为空,则显示null,逻辑很清楚明白

select nvl((select t.salary from (select distinct salary,
dense_rank() over(order by salary desc) as tt
 from Employee) t where t.tt = 2),NULL)
as SecondHighestSalary 
from dual
posted @   DbWong_0918  阅读(104)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示