mysql SELECT COUNT(*)… GROUP BY …不返回计数为零的行

SELECT student_id,section,count( * ) as total
FROM raw_data r
WHERE response = 1
GROUP BY student_id,section

测试共有4个部分,每个部分都有不同的问题.我想知道,对于每个学生和每个部分,他们正确回答了多少问题(响应= 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,if(count( * ) is null,count( * ))  as total

而这根本没有改变结果.其他想法?

更新2:由于以下回复,我得到了它的工作:

 SELECT student_id,SUM(CASE WHEN response = '1' THEN 1 ELSE 0 END ) AS total
 FROM raw_data r
 WHERE response = 1
 GROUP BY student_id,section
最佳答案
SELECT student_id,sum(case when response=1 then 1 else 0 end) as total
FROM raw_data_r GROUP BY student_id,section

请注意,没有WHERE条件.

相关文章

昨天的考试过程中,有个考点的服务器蓝屏重启后发现Mysql启动不了(5.6.45 x32版本,使用innoDB),重装后...
整数类型 标准 SQL 中支持 INTEGER 和 SMALLINT 这两种类型,MySQL 数据库除了支持这两种类型以外,还扩...
一条 SQL 查询语句结构如下: SELECT DISTINCT <select_list> FROM <left_table&...
数据备份 1. 备份数据库 使用 mysqldump 命令可以将数据库中的数据备份成一个文本文件,表的结构和数据...
概述 在实际工作中,在关系数据库(MySQL、PostgreSQL)的单表数据量上亿后,往往会出现查询和分析变慢...
概述 触发器是 MySQL 的数据库对象之一,不需要程序调用或手工启动,而是由事件来触发、激活,从而实现...