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 |
这种现象的原因:文章来源:https://www.toymoban.com/news/detail-510233.html
在over()窗口中,所有的数值排序都是一样的。对于rank因为允许重复,所以全为1,而row_number()不会有重复的排序序号,所以会为1,2,3,4,等,但是每次排序的结果都是不同的。文章来源地址https://www.toymoban.com/news/detail-510233.html
到了这里,关于ROW_NUMBER()、RANK()、DENSE_RANK区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!