rank() over,dense_rank() over,row_number() over函数的区别

本文深入解析了SQL中的三种窗口函数:row_number(), rank()和dense_rank()。详细介绍了它们在处理数据排序时的区别,包括如何处理相同值的排序,以及如何进行分组排序。通过实例演示,帮助读者理解这些函数在实际数据操作中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

rank() over的作用是查出指定条件后进行一个排序,但是有一个特点。使用这个函数,相同列值并列显示,如两个为4的排序,然后接下来就是排序为6,其中排名5跳过。

dense_rank() over的作用和rank() over一样,都是排序而且形同列的值并列显示,如排序为4的两个。但是和rank() over不同的是,接下来它还是会显示排序5的。这就是密集排序。

row_number() over和上面两个函数不同,它不会考虑并列问题,哪怕查询的列值相同,也不会考虑并列,直接排序下去。

上面的三个函数,还可以分组,以rank() over 为例:

select sal,row_number() over (partitition by deptno order by sal) as sal_rank from scott.emp;

其他两个同样,可以这样分组。

结论: 
row_number:不管排名是否有相同的,都按照顺序1,2,3…..n 
rank:排名相同的名次一样,同一排名有几个,后面排名就会跳过几次 
dense_rank:排名相同的名次一样,且后面名次不跳跃

参考:https://blog.youkuaiyun.com/huhu307/article/details/51177346

https://blog.youkuaiyun.com/yjgithub/article/details/76136737

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值