【发布时间】:2009-09-25 16:47:16
【问题描述】:
SELECT student_id, section, count( * ) as total
FROM raw_data r
WHERE response = 1
GROUP BY student_id, section
测试有 4 个部分,每个部分的问题数量不同。我想知道,对于每个学生和每个部分,他们正确回答了多少问题(response=1)。
但是,使用此查询,如果学生在给定部分没有正确回答问题,那么我的结果集中将完全丢失该行。我如何确保对于每个学生,总是返回 4 行,即使一行的“总数”为 0?
这是我的结果集的样子:
student_id section total
1 DAP--29 3
1 MEA--16 2
1 NNR--13 1 --> missing the 4th section for student #1
2 DAP--29 1
2 MEA--16 4
2 NNR--13 2 --> missing the 4th section for student #2
3 DAP--29 2
3 MEA--16 3
3 NNR--13 3 --> missing the 4th section for student #3
4 DAP--29 5
4 DAP--30 1
4 MEA--16 1
4 NNR--13 2 --> here, all 4 sections show up because student 4 got at least one question right in each section
感谢您的任何见解!
更新:我试过了
SELECT student_id, section, if(count( * ) is null, 0, count( * )) as total
这并没有改变结果。其他想法?
更新 2:感谢以下回复:
SELECT student_id, section, SUM(CASE WHEN response = '1' THEN 1 ELSE 0 END ) AS total
FROM raw_data r
WHERE response = 1
GROUP BY student_id, section
【问题讨论】:
-
你需要显示输入的样子。