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

求助:如何编写SQL查询识别学生成绩下降2档及以上的情况

解决方案

要实现这个需求,核心是给字母等级映射数值,并获取每个学生最近两次的考试成绩来对比差距,具体步骤如下:

1. 字母等级转数值

根据你定义的规则(G=1,A=7),用CASE WHEN语句将字母等级转换为可计算的数值:

CASE Grade
    WHEN 'A' THEN 7
    WHEN 'B' THEN 6
    WHEN 'C' THEN 5
    WHEN 'D' THEN 4
    WHEN 'E' THEN 3
    WHEN 'F' THEN 2
    WHEN 'G' THEN 1
END AS grade_score

2. 获取每个学生的最近两次考试记录

使用窗口函数ROW_NUMBER(),按StudentID分组,对每个学生的考试记录按ExamDate倒序排序,标记出最新(排名1)和上一次(排名2)的考试:

WITH ranked_exams AS (
    SELECT
        Exam,
        StudentID,
        ExamDate,
        Grade,
        ROW_NUMBER() OVER (PARTITION BY StudentID ORDER BY ExamDate DESC) AS exam_rank,
        CASE Grade
            WHEN 'A' THEN 7
            WHEN 'B' THEN 6
            WHEN 'C' THEN 5
            WHEN 'D' THEN 4
            WHEN 'E' THEN 3
            WHEN 'F' THEN 2
            WHEN 'G' THEN 1
        END AS grade_score
    FROM your_table_name
)

3. 对比成绩差距并筛选符合条件的记录

将最新和上一次的考试记录关联,计算成绩数值的差值,筛选出最新成绩数值 - 上一次成绩数值 ≤ -2的情况(即成绩下降2档及以上):

SELECT
    latest.Exam || '/' || latest.StudentID AS result
FROM ranked_exams latest
JOIN ranked_exams prev
    ON latest.StudentID = prev.StudentID
    AND latest.exam_rank = 1
    AND prev.exam_rank = 2
WHERE latest.grade_score - prev.grade_score <= -2;

完整SQL代码

WITH ranked_exams AS (
    SELECT
        Exam,
        StudentID,
        ExamDate,
        Grade,
        ROW_NUMBER() OVER (PARTITION BY StudentID ORDER BY ExamDate DESC) AS exam_rank,
        CASE Grade
            WHEN 'A' THEN 7
            WHEN 'B' THEN 6
            WHEN 'C' THEN 5
            WHEN 'D' THEN 4
            WHEN 'E' THEN 3
            WHEN 'F' THEN 2
            WHEN 'G' THEN 1
        END AS grade_score
    FROM your_table_name
)
SELECT
    latest.Exam || '/' || latest.StudentID AS result
FROM ranked_exams latest
INNER JOIN ranked_exams prev
    ON latest.StudentID = prev.StudentID
    AND latest.exam_rank = 1
    AND prev.exam_rank = 2
WHERE latest.grade_score - prev.grade_score <= -2;

结果验证

针对你的示例数据,运行上述代码后会返回:

Phy01b/AA009
Bio1b/AA004

完全符合预期:

  • AA009:上一次成绩B(6),最新成绩E(3),3-6=-3 ≤ -2,符合条件
  • AA004:上一次成绩C(5),最新成绩F(2),2-5=-3 ≤ -2,符合条件

内容的提问来源于stack exchange,提问作者my-socrates-note

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:25:22