白墨MO 2021-02-25 20:14 采纳率: 60%
浏览 39
已结题

请教一道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条回答 默认 最新

  • 白墨MO 2021-02-27 00:47
    关注
    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

    已解决。 

     

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog