分组只返回一行

时间:2016-10-19 09:59:48

标签: mysql sql

我在mySQL中使用以下sql 我不明白为什么我只输出一行作为输出。

python rethinkdb_monitor_batch.py

3 个答案:

答案 0 :(得分:0)

只需做一些更改并尝试:

select category, count(*) as counts  
 from table_1   
group by category

使用上面的代码并查看它是否返回多行,这意味着您的查询是正确的,但只有一行符合以下条件,即:

where  date_add between '2016-07-01' and '2016-07-31'  
group by category

所以Query返回一行,当你的数据库表有更多数据符合这个标准时,它会返回更多行。感谢。

答案 1 :(得分:0)

由于您按categories进行分组,因此您在该日期范围内有多少categories是您必须首先查找的内容。如果您在指定的日期时间内有{n}个categories ,理想情况下,结果集应该有'n'行。

您的查询本身没有任何问题。我尝试了两个类别的查询,我得到了预期的结果集。

如果您想要结果集中的所有类别而不管它们是否在结果集中,那么您可以使用以下类似的东西:

select      category, count(*) as counts
from        tab
where       date_add between '2016-07-01' and '2016-07-31'  
group by    category

union

select      category, 0 as counts
from        tab
where       date_add not between '2016-07-01' and '2016-07-31'  
group by    category

请注意,这是一种简单的方法,但肯定不是最好的

这将显示所有类别,而不考虑日期。你可以在这看到这个 - > http://sqlfiddle.com/#!9/a3a9b/2 在这看到 - > http://sqlfiddle.com/#!9/bdb979/1

如果您将小提琴中的数据集修改为三个类别,那么结果集将返回预期的3行。

在此处查看 - > http://sqlfiddle.com/#!9/ec7a8/1

同样重要的是要注意,类别必须在该日期期间出现才能显示在结果集中。

希望这有帮助!!!

答案 2 :(得分:0)

您显然只获得一行,因为只有一个类别符合where条件。

如果您希望所有类别都具有该范围内的添加计数,请使用条件聚合:

select category,
       sum(date_add between '2016-07-01' and '2016-07-31') as counts  
from table_1   
group by category;