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
相关产品推荐
相关产品推荐

