请教一道MySQL的练习题

题目:统计每个班级每门课程的平均分,以及该门课程的最高分和学生。显示:班级名称、课程名称、平均分、最高分、最高分姓名。

我做出来的最高分姓名显示是错误的……请问改怎么写呢?

我写的sql:

SELECT cl.`name` 班级名称,co.`name` 课程名称,CAST(AVG(ss.score) AS DECIMAL(5,2)) 平均分,
MAX(ss.score) 最高分,st.`name` 最高分姓名 FROM class cl
LEFT JOIN class_course cc ON cl.id = cc.class_id
LEFT JOIN course co ON co.id=cc.course_id
LEFT JOIN student_score ss ON ss.course_id=cc.course_id
LEFT JOIN student st ON st.id=ss.student_id
GROUP BY cl.`name`,co.`name`
ORDER BY ss.score DESC;

 

下图是表:

下面是执行结果:全是王一。。 

 

SELECT DISTINCT t1.cname 班级名称,t1.conema 课程名称,t1.`avg` 平均分,
t1.`max` 最高分,t2.sname 最高分姓名 FROM 
(
	SELECT cl.id clid,co.id coid,cl.`name` cname,co.`name` conema,CAST(AVG(ss.score) AS DECIMAL(5,2)) `avg`,
	MAX(ss.score) `max` FROM class cl
	LEFT JOIN class_course cc ON cl.id = cc.class_id
	LEFT JOIN course co ON co.id=cc.course_id
	LEFT JOIN student_score ss ON ss.course_id=cc.course_id
	LEFT JOIN student st ON st.id=ss.student_id
	GROUP BY cl.`name`,co.`name`
) t1
LEFT JOIN (
	SELECT st.id sid,co.id coid,cl.id clid,st.`name` sname,ss.score score FROM student st
	LEFT JOIN student_score ss ON st.id=ss.student_id
	LEFT JOIN class_course cc ON ss.course_id=cc.course_id
	LEFT JOIN class cl ON cl.id = cc.class_id
  LEFT JOIN course co ON co.id=cc.course_id
) t2
ON t1.clid=t2.clid
AND t1.coid=t2.coid
WHERE t1.`max`=t2.score

已解决。