求MySQL查询语句:获取成绩连续递增的学生详情
解决思路与正确查询语句
原查询语句的问题在于:它仅筛选了单条记录满足成绩递增或为首条记录,但没有判断学生的所有学期成绩是否全程连续递增。学生B虽然第二学期成绩下降,但第三学期成绩回升,原语句会错误保留B的第1、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
相关产品推荐
相关产品推荐

