当前位置: 代码迷 >> 综合 >> 【每天进步一点点】【Hive窗口函数】 ROW_NUMBER RANK DENSE_RANK 三者的区别
  详细解决方案

【每天进步一点点】【Hive窗口函数】 ROW_NUMBER RANK DENSE_RANK 三者的区别

热度:73   发布时间:2024-02-09 01:18:33.0

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开始一直排名,遇到一样的值 排名相同 但是总数变少
  相关解决方案