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

如何为GRADES表中缺失的数学、英语科目添加行记录?

解决方案:补全学生学期的英语/数学记录

要实现需求,核心是先锁定每个学生有选课记录的学期(即学生+年份+学期的唯一组合),再为这些学期补全英语、数学的默认记录,最后合并原有非英数科目记录。以下是可行的SQL语句:

WITH StudentTerms AS (
    -- 获取所有学生有选课记录的(学生+年份+学期)组合
    SELECT DISTINCT Student, Year, Term
    FROM GRADES
),
RequiredSubjects AS (
    -- 定义需要补全的目标科目
    SELECT '英语' AS Subject UNION ALL
    SELECT '数学' AS Subject
),
StudentTermSubjects AS (
    -- 生成每个学生每个有记录的学期对应的英数科目行
    SELECT st.Student, st.Year, st.Term, rs.Subject
    FROM StudentTerms st
    CROSS JOIN RequiredSubjects rs
)
-- 合并补全的英数记录和原表的非英数记录
SELECT 
    sts.Student,
    sts.Year,
    sts.Term,
    g.CourseTitle,
    sts.Subject,
    COALESCE(g.Credit, 0) AS Credit
FROM StudentTermSubjects sts
LEFT JOIN GRADES g 
    ON sts.Student = g.Student 
    AND sts.Year = g.Year 
    AND sts.Term = g.Term 
    AND sts.Subject = g.Subject

UNION ALL

-- 保留原表中不属于英语、数学的科目记录
SELECT 
    Student, Year, Term, CourseTitle, Subject, Credit
FROM GRADES
WHERE Subject NOT IN ('英语', '数学')

-- 按学生、年份、学期、科目排序,匹配期望结果的顺序
ORDER BY Student, Year, Term, Subject;

关键逻辑说明

  • StudentTerms:筛选出所有学生有选课记录的学期维度,确保只在学生有学分的学期补全英数记录,符合需求中「未获得任何学分则无需生成」的要求。
  • RequiredSubjects:明确需要补全的两个科目,避免依赖原表数据(如果原表某学生从未选过英数,原写法会漏掉)。
  • StudentTermSubjects:通过交叉连接,为每个学生的每个目标学期生成英数两行基础记录。
  • 左连接原表:匹配已有选课记录,未匹配到的记录自动用COALESCE将学分设为0,课程名称保持NULL。
  • UNION ALL合并非英数记录:保留原表中体育、科学等其他科目的原始数据,避免丢失。

执行后会生成完全符合期望的结果,包括补全的0学分英数记录,以及完整保留的其他科目数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:55:53