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
)

##

猜你喜欢

转载自www.cnblogs.com/qi-yuan-008/p/12656054.html
今日推荐