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;