weixin_43742828
白墨MO
采纳率50%
2021-02-25 20:14

请教一道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;

下图是表:

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

 

  • 点赞
  • 收藏
  • 复制链接分享

1条回答

  • weixin_43742828 白墨MO 2月前
    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

    已解决。 

     

    点赞 评论 复制链接分享