hive 和 mysql 求解分组 top n

Posted 稚枭天卓

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

 

 

以上是关于hive 和 mysql 求解分组 top n的主要内容,如果未能解决你的问题,请参考以下文章

MySQL获取分组后的TOP 1和TOP N记录

hive分组排序函数 分组取top10

获取分组后的TOP 1和TOP N记录

MySQL:如何查询出每个分组中的 top n 条记录?

hive中分组计算top N.

SQL rownumber partition 取范围数据进行分组