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

求MySQL查询语句:获取成绩连续递增的学生详情

解决思路与正确查询语句

原查询语句的问题在于:它仅筛选了单条记录满足成绩递增或为首条记录,但没有判断学生的所有学期成绩是否全程连续递增。学生B虽然第二学期成绩下降,但第三学期成绩回升,原语句会错误保留B的第1、3学期记录,不符合需求。

正确逻辑

  1. 标记每个学生每学期成绩是否存在下降(或持平)情况;
  2. 筛选出无任何成绩下降的学生;
  3. 取出这些学生的全部成绩记录。

正确MySQL查询语句

WITH student_trend AS (
    SELECT 
        Name,
        Sem,
        Marks,
        -- 标记当前学期是否比前一学期成绩未递增
        CASE 
            WHEN Marks <= LAG(Marks, 1) OVER (PARTITION BY Name ORDER BY Sem) 
            THEN 1 
            ELSE 0 
        END AS has_decrease
    FROM Marks
),
qualified_students AS (
    SELECT Name
    FROM student_trend
    GROUP BY Name
    -- 筛选全程无成绩下降的学生
    HAVING MAX(has_decrease) = 0
)
SELECT m.Name, m.Sem, m.Marks
FROM Marks m
JOIN qualified_students qs ON m.Name = qs.Name
ORDER BY m.Name, m.Sem;

执行结果

Name    Sem Marks
A       1   80
A       2   90
A       3   95
C       1   80
C       2   85
C       3   90

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:40:58