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

如何用SQL获取基于另一列值+1的学期对应的修读学分总和?

问题描述

我有一个存储学生成绩数据的数据库,每条记录包含STUDENT_ID、attempt_credits、REPORTING_TERM、STUDENT_START_TERM字段,数据示例如下:

STUDENT_IDattempt_creditsREPORTING_TERMSTUDENT_START_TERM
13FA2020FA2020
14FA2020FA2020
13SP2021FA2020
13SP2021FA2020
23SP2021SP2021
24FA2021SP2021
23SP2022SP2021
23SP2022SP2021

我需要按学期统计attempt_credits的总和:

  • 获取第一学期学分时,只需在WHERE子句设置STUDENT_START_TERM = REPORTING_TERM即可。
  • 现在需要获取第二学期的学分总和:
    • 入学学期为FA2020的学生,要获取SP2021的学分;
    • 入学学期为SP2021的学生,学期进度是SP2021→FA2021→SP2022,需获取SP2022的学分。

我尝试过以下查询,但无法满足特殊场景需求:

SELECT TOP 1 SUM(attempt_credits)
FROM TABLE_1
WHERE REPORTING_TERM LIKE 'SP%'
ORDER BY REPORTING_TERM

想知道能否实现类似如下逻辑的查询:

SELECT SUM(attempt_credits)
FROM TABLE_1
WHERE REPORTING_TERM LIKE 'SP%' AND (LEFT(STUDENT_START_TERM, 4) + 1)

即获取REPORTING_TERM以SP开头且年份为STUDENT_START_TERM年份+1的attempt_credits总和,也就是能否基于另一列值做加法运算来筛选目标列值?

注:我知道上述查询做了简化,缺少聚合所需的GROUP BY子句;且该数据库为团队先前建立的,我只能基于现有结构处理。


解决方案

完全可以基于另一列的值做运算来筛选目标列,针对你的需求,需要把学期的学期标识和年份拆分出来,再做逻辑判断:

按学生统计第二学期学分的查询语句

SELECT STUDENT_ID, SUM(attempt_credits) AS second_term_total_credits
FROM TABLE_1
WHERE 
    -- 锁定春季学期记录
    REPORTING_TERM LIKE 'SP%'
    -- 匹配年份:目标学期年份 = 入学学期年份 + 1
    AND CAST(RIGHT(REPORTING_TERM, 4) AS INT) = CAST(RIGHT(STUDENT_START_TERM, 4) AS INT) + 1
GROUP BY STUDENT_ID

逻辑说明

  1. 提取年份并转换类型:用RIGHT(字段名,4)提取学期字段的后4位年份,再转换为整数类型,才能进行加法运算;
  2. 场景匹配:年份+1的逻辑正好覆盖你提到的两种情况:
    • 入学FA2020(年份2020)→ 目标SP2021(2020+1=2021);
    • 入学SP2021(年份2021)→ 目标SP2022(2021+1=2022);
  3. 分组聚合:按STUDENT_ID分组,得到每个学生第二学期的总学分。

扩展:按目标学期维度统计总和

如果需要统计每个符合条件的学期的总学分(而非按学生),可以修改为:

SELECT REPORTING_TERM, SUM(attempt_credits) AS total_second_term_credits
FROM TABLE_1
WHERE 
    REPORTING_TERM LIKE 'SP%'
    AND CAST(RIGHT(REPORTING_TERM, 4) AS INT) = CAST(RIGHT(STUDENT_START_TERM, 4) AS INT) + 1
GROUP BY REPORTING_TERM

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:53:10