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

SQL查询需求:按学生ID统计每人通过的考试次数

解决按学生ID统计通过考试次数的SQL问题

问题说明

现有results表结构及数据如下:

student | score | passing_grade
1       | 50    | 70
1       | 30    | 50
2       | 90    | 50
2       | 80    | 100

需编写SQL查询,按学生ID统计每人通过的考试次数(通过判定条件为score > passing_grade),预期输出结果:

student | passed
1       | 0
2       | 1

正确SQL实现

SELECT 
    student,
    SUM(CASE WHEN score > passing_grade THEN 1 ELSE 0 END) AS passed
FROM results
GROUP BY student;

对两种尝试的分析

  • WHERE子句筛选的问题:直接用WHERE score > passing_grade会过滤掉未通过的行,导致学生1的记录被排除,最终结果无法显示学生1的0,不符合需求。
  • COUNT(CASE...)的问题:COUNT函数会统计所有非NULL值,若写COUNT(CASE WHEN score > passing_grade THEN 1 ELSE 0 END),ELSE返回的0属于非NULL值,会被计入统计,学生1的结果会变成2(两行都被计数)。若将ELSE改为NULL,即COUNT(CASE WHEN score > passing_grade THEN 1 ELSE NULL END),逻辑可行,但用SUM更直观易懂。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:31:35