hive的排序函数 rank(),dense_rank(),row_number() 区别

建表:

create table test_rank(
name string,
subject string,
score  string
)
;

插入数据:

insert overwrite table test_rank values
('孙悟空','语文','87'),
('孙悟空','数学','95'),
('孙悟空','英语','68'),
('沙悟净','语文','94'),
('沙悟净','数学','56'),
('沙悟净','英语','78'),
('宋松松','语文','64'),
('宋松松','数学','86'),
('宋松松','英语','84'),
('罗婷婷','语文','87'),
('罗婷婷','数学','85'),
('罗婷婷','英语','78')
;

执行排序代码:

select * ,
    RANK()  over(partition by subject  order by score desc) rank,
    DENSE_RANK()  over(partition by subject  order by score desc) dense_rank ,
    ROW_NUMBER()  over(partition by subject  order by score desc) row_num
from test_rank
;

输出结果:


image.png

全国排名TOP5的大学有20所,我怀疑就是用dense_rank() 计算的。。

另外,不常用的排序函数还有:percent_rank(),ntile()。

你可能感兴趣的:(hive的排序函数 rank(),dense_rank(),row_number() 区别)