You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中为每个学生计算考试及实验+项目两类平均分?

解决方案:同时计算考试平均分与实验+项目平均分

原SQL通过HAVING子句只保留了考试('e')类型的记录,所以没法同时计算实验和项目的平均分。你可以用条件聚合函数来实现需求,不用过滤其他类型的记录,直接在聚合时指定计算范围即可。

按学生+课程维度统计的SQL

SELECT 
    s.id AS student_id,
    s.name AS student_name,
    c.name AS course_name,
    AVG(CASE WHEN g.grade_type = 'e' THEN g.mark END) AS "Average Exam Grade",
    AVG(CASE WHEN g.grade_type IN ('l', 'p') THEN g.mark END) AS "Average Activity Grade"
FROM Students s
JOIN Course_Signup csn ON s.id = csn.student_id
JOIN Courses c ON c.id = csn.course_id
JOIN Grades g ON g.signup_id = csn.id
GROUP BY s.id, s.name, c.name
ORDER BY s.id ASC

按学生整体维度统计的SQL(不区分课程)

如果不需要按课程拆分,只看每个学生所有考试、所有实验+项目的平均分,可以调整分组条件:

SELECT 
    s.id AS student_id,
    s.name AS student_name,
    AVG(CASE WHEN g.grade_type = 'e' THEN g.mark END) AS "Average Exam Grade",
    AVG(CASE WHEN g.grade_type IN ('l', 'p') THEN g.mark END) AS "Average Activity Grade"
FROM Students s
JOIN Course_Signup csn ON s.id = csn.student_id
JOIN Grades g ON g.signup_id = csn.id
GROUP BY s.id, s.name
ORDER BY s.id ASC

关键说明

  • 用CASE WHEN在AVG函数里做筛选:只有符合条件的成绩才会被纳入对应平均分的计算,不符合的会被视为NULL,AVG会自动忽略NULL值。
  • 删掉了原SQL的子查询和HAVING子句,直接关联表后分组,这样能同时保留所有成绩类型的数据用于计算。

内容的提问来源于stack exchange,提问作者Andrei0408

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 16:55:27