hive 和 mysql 求解分组 top n

MySQL分组排序求Top N

表结构

按照grp分组,按照num排序,每组取Top 3,输出结果如下:

SELECT * FROM score AS t3   
WHERE (   
    SELECT COUNT(*) FROM score AS t1   
    LEFT JOIN score AS t2   
    ON t1.grp = t2.grp AND t1.num < t2.num   
    WHERE t1.id = t3.id  
) < 3  
ORDER BY t3.grp ASC, num DESC  

 

 

HIVE 分组排序求Top N

假设成绩表的记录如下:

物理  80 张三
数学  100 李一
物理  90  张二
数学  90  李二
物理  100 张一
数学  80  李三
.....

经过order by全局排序后,记录如下

物理  100 张一
物理  90  张二
物理  80 张三
.....
数学  100 李一
数学  90  李二
数学  80  李三
....

 

接着执行row_number函数,返回值如下

科目  成绩 学生   row_number
物理  100 张一      1
物理  90  张二      2
物理  80  张三      3
.....
数学  100 李一      1
数学  90  李二      2
数学  80  李三      3
....
select subject,score,student from
    (select subject,score,student from score where dt='2012'  distribute by subject sort by subject asc, socre desc) order_score
where row_number(subject) <= 100;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值