hive中可用于分组排序的函数主要有:row_number,rank,dense_rank,它们分别有不同的特点,关键词主要用到:partition by和order by等。
【1】row_number:排序时给每一行分配唯一的顺序,相同行顺序也不同
select age, grade, row_number() over (partition by grade order by age desc) rn from ( select age, grade from db_name.tb_name where [conditions] limit 50 )
第一列为age,第二列为grade,第三列为排序
【2】rank:相同行会分配相同的顺序,但是接下来会跳跃排序
select age, grade, rank() over (partition by grade order by age desc) rn from ( select age, grade from db_name.tb_name where [conditions] limit 50 )
第一列为age,第二列为grade,第三列为排序
【3】dense_rank:为相同行分配同样的顺序,但是接下来的顺序也是连续的,不是跳跃的。
select age, grade, dense_rank() over (partition by grade order by age desc) rn from ( select age, grade from db_name.tb_name where [conditions] limit 50 )
第一列为age,第二列为grade,第三列为排序
【4】这三个函数使用的时候也可以直接排序,不先分组。【注意:这些窗函数的使用必须要有order by语句,不能只分组】
select age, grade, row_number() over (order by age desc) rn #同样可以用于rank, dense_rank函数 from ( select age, grade from db_name.tb_name where [conditions] limit 50 )
##