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

使用SQL的SUM()、GROUP BY与连接查询统计学生修读学分总和

修正SQL实现按学生分组统计总学分

原SQL存在两个核心问题:

  • 未关联students和registration表,导致三张表产生笛卡尔积,计算出的是所有课程学分的重复总和,而非按学生分组的结果
  • 分组字段不完整,在严格SQL模式下会触发语法错误(非聚合列必须出现在GROUP BY中)

修正后的SQL(仅统计有选课记录的学生)

SELECT 
    s.studentID, 
    s.firstName, 
    s.lastName, 
    SUM(c.credits) AS total_credits
FROM students s
JOIN registration r ON s.studentID = r.studentID
JOIN courses c ON r.courseCode = c.courseCode
GROUP BY s.studentID, s.firstName, s.lastName;

扩展:统计所有学生(含未选课的学生,总学分显示0)

如果需要包含没有选课记录的学生,使用LEFT JOIN处理:

SELECT 
    s.studentID, 
    s.firstName, 
    s.lastName, 
    COALESCE(SUM(c.credits), 0) AS total_credits
FROM students s
LEFT JOIN registration r ON s.studentID = r.studentID
LEFT JOIN courses c ON r.courseCode = c.courseCode
GROUP BY s.studentID, s.firstName, s.lastName;

关键说明

  • 使用显式JOIN语法替代隐式逗号分隔,表关联逻辑更清晰,彻底避免笛卡尔积问题
  • GROUP BY包含所有非聚合字段(studentID、firstName、lastName),符合SQL标准规范
  • COALESCE函数用于将未选课学生的SUM结果(NULL)转换为0,保证输出结果的统一性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:00:52