hive 和 mysql 求解分组 top n

MySQL分组排序求Top N

表结构
hive 和 mysql 求解分组 top n_第1张图片

按照grp分组,按照num排序,每组取Top 3,输出结果如下:
hive 和 mysql 求解分组 top n_第2张图片

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)