mysql 分组后获取前N条数据

mysql GROUP BY无法实现,用的临时变量完成的,经过测试效率极高
-- @rownum 用于计算条数
-- @clazz_id 用于比较的临时班级id(分组列名)
-- 获取每个班级前5名的学生
SELECT * FROM ( SELECT id,
               student_id,
               score, clazz_id ,
@rownum:=IF(@clazz_id=clazz_id,@rownum+1,1) count, @clazz_id := clazz_id FROM student_score,
              (select @rownum := 0,@clazz_id:=0) r
ORDER BY clazz_id,score DESC -- 此处把相同班级的拍在一起用于计算行编号,再把分数降序排序 ) temp WHERE count <= 5 -- 分数降序的,直接取出最前5条

 

posted @ 2021-06-10 11:35  Binz  阅读(426)  评论(0编辑  收藏  举报