首页 > 代码库 > hive 中row_number(),rank,dense_ran()的用法
hive 中row_number(),rank,dense_ran()的用法
hive中一般取top n时,row_number(),rank,dense_ran()这三个函数就派上用场了,
先简单说下这三函数都是排名的,不过呢还有点细微的区别。
通过代码运行结果一看就明白了。
示例数据:
1 a 102 a 123 b 134 b 125 a 146 a 157 a 138 b 119 a 1610 b 1711 a 14
sql语句
select id,name,sal,rank()over(partition by name order by sal desc ) rp,dense_rank() over(partition by name order by sal desc ) drp,row_number()over(partition by name order by sal desc) rmpfrom f_test
结果
10 b 17 1 1 13 b 13 2 2 24 b 12 3 3 38 b 11 4 4 49 a 16 1 1 16 a 15 2 2 211 a 14 3 3 35 a 14 3 3 47 a 13 5 4 52 a 12 6 5 61 a 10 7 6 7
从结果看出
rank() 排序相同时会重复,总数不会变
dense_rank()排序相同时会重复,总数会减少
row_number() 会根据顺序计算
正好听到一个需求,求sal前50%的人
用这个写了一下,
select * from (select id,name,sal,rank()over(partition by name order by sal desc ) rp,dense_rank() over(partition by name order by sal desc ) drp,row_number()over(partition by name order by sal desc) rmp, count(*)over(partition by name) *0.5 as countfrom f_test) t where t.rp <t.count;
感觉虽然可以实现,但是有点复杂,有没有更好的方法实现呢
hive 中row_number(),rank,dense_ran()的用法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。