当前位置: 首页 > 面试题库 >

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

南门棋
2023-03-14
问题内容
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, 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

问题答案:
SELECT student_id, section, sum(case when response=1 then 1 else 0 end) as total
FROM raw_data_r GROUP BY student_id, section

请注意,没有WHERE条件。



 类似资料:
  • 问题内容: 使用SQL Server 2012: 产量 必须指定要从中选择的表 这正是我所期望的。 但有趣的是 返回1。 有人可以向我解释这里算什么吗? 编辑:并可能包括来源… 问题答案: SQL Server(在幕后)有效地将from应用于仅具有一行的虚拟表。因此,您将得到1作为计数。 会做同样的事情,例如,一次返回“ test”。 就像Oracle中的DUAL表,DB2中的SYSDUMMY1等

  • 问题内容: 我正在根据日期范围进行计数。当前查询确实返回正确的结果,但我需要其他信息。在当前形式下,查询将显示具有正确计数的项目。但是,我需要显示所有项目,即使在指定的日期范围内它们的计数为零。 这是SQL代码: 当我执行此查询时,我得到以下结果: https://dl.dropbox.com/u/17234826/SQLresult.png 这个结果是正确的,但是即使创建范围中没有需求,我也需要

  • 问题内容: 我在csv文件中有这样的数据 我可以像这样阅读和分组 我懂了 我希望这个(顺序无所谓) 我想知道是否有可能算零次 问题答案: 你可以用与: 如果您需要使用输出:

  • 我想使用Laravel Eloquent完成任务。我在网上搜索过,没有找到任何有说服力的东西。有些人将groupBy()查询与查询生成器一起使用,如以下链接 但是我想创建这样的查询风格: 此代码仅返回第一个的计数。但是我要计算所有的。

  • 我在ViewDidLoad函数中有一些代码,它将在调用堆栈的末尾设置一个类变量。我试图重构代码,使其成为一个单独的函数,它将返回值,而不是设置类变量。 由于我缺乏swift知识,我不确定哪里出了问题,我的函数似乎返回得太厄尔了,因为我可以在调试器中告诉我,它在被设置为之前跳转到return。 我还可以在调试器中看到,内部函数在返回主函数后调用。 如何等待内部调用完成后再返回?或者什么是正确的快速方

  • 问题内容: 我有以下熊猫数据框: 我想计算的是每人参加和未参加的活动数量,以及每人的总积分。所以我做一个groupby: 这会给我类似的东西: 但我想要类似的东西: 我尝试使用pd.MultiIndex尝试填充丢失的零计数,但无济于事。我已经阅读了其他类似的问题,但是在使用MultiIndex处理连续点列时遇到了麻烦。任何想法如何做到这一点? 问题答案: 您可以使用+做到这一点。为了您与精确的输出