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

如何编写SQL实现考试成绩行转列并计算各科目平均分

问题背景

涉及的examresults成绩表共4个字段:

  • stid:学生ID
  • term:学段
  • subjects:科目
  • score:分数
    当前表内存储了stid为STD-1的学生共6条成绩记录,覆盖Term 1、Terminal两个学段的英语、数学、科学三科成绩。需要以科目为行维度,输出每行对应科目的TERM ONE成绩、TERMINAL成绩、两学段平均分。
    原尝试执行的SQL存在DISTINCT与GROUP BY逻辑混用、未做跨学段值聚合的问题,无法得到预期结果:
SELECT DISTINCT(subject),score FROM `examresults` WHERE stid='STD-1' GROUP BY subject,term
正确SQL实现

用条件聚合+按科目分组的逻辑即可实现行转列需求,语句如下:

SELECT
  subjects AS 科目,
  MAX(CASE WHEN term = 'Term 1' THEN score END) AS `TERM ONE成绩`,
  MAX(CASE WHEN term = 'Terminal' THEN score END) AS `TERMINAL成绩`,
  AVG(score) AS `两学段平均分`
FROM examresults
WHERE stid = 'STD-1'
GROUP BY subjects;
逻辑说明
  • 按subjects字段分组后,每个分组对应当前学生的一个科目,天然满足“科目为行维度”的要求
  • 分组内通过CASE WHEN匹配学段值提取对应分数,由于每个科目对应每个学段仅存在1条成绩记录,用MAX()即可准确取到对应学段的分数,不需要额外去重
  • 平均分直接调用AVG()聚合函数,会自动计算当前科目分组下所有成绩的平均值
  • 如果表内存储的学段字符串大小写、拼写和示例不一致,只需调整CASE WHEN后的匹配值即可正常运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 10:24:22