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 )
##