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条