题目:统计每个班级每门课程的平均分,以及该门课程的最高分和学生。显示:班级名称、课程名称、平均分、最高分、最高分姓名。
我做出来的最高分姓名显示是错误的……请问改怎么写呢?
我写的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
已解决。