mysql - Group by 仅返回一行

标签 mysql sql

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

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

最佳答案

由于您按类别进行分组,因此您首先需要查找的就是该日期范围内有多少个类别。如果您在指定日期期间内有“n”个类别,则理想情况下您的结果集应包含“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

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

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

再次强调,类别必须在该日期范围内出现,才能显示在结果集中。

希望这有帮助!!!

关于mysql - Group by 仅返回一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40128073/

相关文章:

java - 是否有任何特定于 DBMS 的 SQL 客户端 Java 库(不一定与 JDBC 相关或兼容)

mysql - 月和年的范围查询

Mysql多条件选择

php - 将文件作为 varbinary 数据类型插入 mysql 数据库

c# - 在新连接中提交事务

mysql - SQL删除列中的每个唯一值?

sql - Access sql查询循环引用错误

sql - 存储过程在手动运行时工作,而不是从 sql server 代理运行

mysql - SQL - 从表 X 中删除所有重复条目

php - 如何将同一个表中的多个用户信息回显并分离到他们的每个页面