SQL展示平均分低于80的班级学生各科成绩

现有表1,字段信息如图左,我想得出右边结果,平均分小于80的班级人员学科得分,每个人还要统计学科总分,请问要怎么改呢?没什么头绪

select 班级,姓名,学科,得分
from 表1
group by 班级
having avg(得分)<80

img

-- 先求出平均分小于80的班级,以此作为子查询获取科目分数和合计分数
SELECT
    班级
   ,姓名
   ,学科
   ,得分
FROM1
WHERE 班级 IN
(
    SELECT 班级
    FROM1
    GROUP BY 班级
    HAVING AVG(得分) < 80
)
UNION ALL
SELECT
    班级
   ,姓名
   ,'学科合计' as 学科
   ,SUM(得分)    as 得分
FROM1
WHERE 班级 IN
(
    SELECT 班级
    FROM1
    GROUP BY 班级
    HAVING AVG(得分) < 80
)
GROUP BY 
     班级
    ,姓名
;

你的代码呢?而且你可以试试Excel

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答由chatgpt基于相关博客总结生成:

    问题描述中提到了一个数据库表格,包含学生的姓名、班级、学科和得分等信息。要求找出平均分低于80的班级的学生在各科的成绩,并计算每个学生在各科的总分。问题中给出了一段SQL语句,但没有得到预期的结果。下面是解决该问题的具体步骤和代码:

    1. 修改SQL语句,将查询结果中的"班级"、"姓名"、"学科"和"得分"按要求显示出来。
    SELECT 班级, 姓名, 学科, 得分
    FROM 1
    GROUP BY 班级, 姓名, 学科, 得分
    HAVING AVG(得分) < 80
    
    1. 添加一个字段来计算每个学生的总分,并将查询结果按照班级、姓名和学科进行排序。
    SELECT 班级, 姓名, 学科, 得分, SUM(得分) AS 总分
    FROM 1
    GROUP BY 班级, 姓名, 学科, 总分
    HAVING AVG(得分) < 80
    ORDER BY 班级, 姓名, 学科
    

    这样修改后的SQL语句能够满足问题要求,即找出平均分低于80的班级的学生在各科的成绩,并计算每个学生在各科的总分。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^