2016-07-12 93 views
0

我有一个数据库,其中包含一些图像的信息,每行包含一个createdAt日期和一个viewCount。数据范围从2014年9月至今(2016年7月)。我想获得的所有图像视图的量的总和每月月供MySQL`SUM`与`GROUP BY`在结果中缺少数据

当我运行查询

SELECT YEAR(createdAt), MONTH(createdAt), SUM(viewCount) 
FROM Images 
GROUP BY MONTH(createdAt); 

我只是在2014年9月和2015年8月

之间返回12行有成果
Year | Month | Views 
------------------- 
2014 | 9 | 1452 
2014 | 10 | 279 
2014 | 11 | 34428 
2014 | 12 | 4763 
2015 | 1 | 2826 
2015 | 2 | 777 
2015 | 3 | 568 
2015 | 4 | 1309 
2015 | 5 | 46744 
2015 | 6 | 1541 
2015 | 7 | 8160 
2015 | 8 | 91 

如果我添加日期克制它会给我的最新数据,但同样只有12行

SELECT YEAR(createdAt), MONTH(createdAt), SUM(viewCount) 
FROM Images WHERE createdAt > DATE('2015-08-01 00:00:00') 
GROUP BY MONTH(createdAt); 

Year | Month | Views 
-------------------- 
2015 | 8 | 981 
2015 | 9 | 1031 
2015 | 10 | 2566 
2015 | 11 | 3325 
2015 | 12 | 411  
2016 | 1 | 2140 
2016 | 2 | 710 
2016 | 3 | 714 
2016 | 4 | 1985 
2016 | 5 | 426 
2016 | 6 | 119 
2016 | 7 | 81 

我意识到,自从7月份以来,第二个查询停在那里,因为这是数据结束的地方,但为什么第一个查询不会返回所有结果呢?

+1

来看通过它出现什么你想要的,也尽量用'YEAR(createdAt)'以及在第一个查询分组。 –

回答

1

集团的年/月:

SELECT YEAR(createdAt), MONTH(createdAt), SUM(viewCount) 
FROM Images 
--WHERE createdAt > DATE('2015-08-01 00:00:00') 
GROUP BY YEAR(createdAt), MONTH(createdAt); 

相关Group by clause in mySQL and postgreSQL, why the error in postgreSQL?

请记住,从MySQL 5.7.6+您的初始查询甚至可能不会,因为这是默认设置only_full_group_by工作。

+0

这给了我所有的结果(当然删除了WHERE子句) –

1

您可以简单地添加年初你按

SELECT YEAR(createdAt), MONTH(createdAt), SUM(viewCount) 
FROM Images 
GROUP BY YEAR(createdAt), MONTH(createdAt) 
ORDER BY YEAR(createdAt), MONTH(createdAt)