ROW_NUMBER()、RANK()、DENSE_RANK区别

ROW_NUMBER():排序,不会有重复的排序数值。对于相等的两个数字,排序序号不一致

数值 排序序号
1 1
1 2
2 3
select
id,
row_number()
over(order by id) rn
from
data 
DENSE_RANK():排序,可有重复值。对于相等的两个数字,排序序号一致

数值 排序序号
1 1
1 1
2 2
select
id,
dense_rank()
over(order by id) rn
from
data 
RANK():排序,可有重复值。对于相等的两个数字,排序序号一致,但是总数会减少

数值 排序序号
1 1
1 1
2 3
select
id,
rank()
over(order by id) rn
from
data 
如果窗口中over()无排序字段,那么结果如何?

select
id,
rank()
over()
from
data 
数值 排序序号
1 1
1 1
2 1
如果窗口中over()无排序字段,使用的是row_number()排序,结果如何?

select
id,
row_number()
over()
from
data 
数值 排序序号
1 1
2 2
1 3
这种现象的原因:

在over()窗口中,所有的数值排序都是一样的。对于rank因为允许重复,所以全为1,而row_number()不会有重复的排序序号,所以会为1,2,3,4,等,但是每次排序的结果都是不同的。

————————————————
版权声明:本文为CSDN博主「牧码文」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46429290/article/details/125530809