1. 测试数据
要求,根据 domain 分组,对traffic做倒叙排序,需要得到每个domain的排序情况;
2. RANK ROW_NUMBER DENSE_RANK 窗口函数使用
SQL
select
domain, time, traffic,
ROW_NUMBER() OVER (partition by domain order by traffic desc) rn1,
RANK() OVER (partition by domain order by traffic desc) rn2,
DENSE_RANK() OVER (partition by domain order by traffic desc) rn3
from ruozedata_windows_2
结果
剖析
2.1 ROW_NUMBER
row_number 对排序之后生成的编号 不会重复,按照顺序排序
2.2 RANK
RANK 对排序之后的值生成的编号,如果值相同 编号也保持一致,但是总排序保持不变
2.3 DENSE_RANK
DENSE_RANK 对排序之后的值生成的编号,如果值相同 编号也保持一致,但是总排序会减少
3.总结
- ROW_NUMBER 从1开始一直排名,遇到一样的值 按照顺序进行排名
- RANK 从1开始一直排名,遇到一样的值 排名相同 但是总数不变
- DENSE_RANK 从1开始一直排名,遇到一样的值 排名相同 但是总数变少