hive的分組排序 row_number


hive中可用於分組排序的函數主要有:row_numberrankdense_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
)

 

##


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM