MySQL`SUM`与`GROUP BY`在结果中缺少数据

时间:2016-07-12 16:53:09

标签: mysql sql

我有一个数据库,其中的表格包含一些图片的信息,每行包含createdAt日期和viewCount。数据范围从2014年9月至今(2016年7月)。我希望每月获得该月所有图片的观看量的总和

当我运行查询时

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月份开始,第二个查询就会停止,因为数据结束时,第一个查询为什么不返回所有结果?

2 个答案:

答案 0 :(得分: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默认设置,您的初始查询可能无法正常工作。

答案 1 :(得分:1)

您可以通过

简单地将年份添加到您的组中
 SELECT YEAR(createdAt), MONTH(createdAt), SUM(viewCount) 
 FROM Images 
 GROUP BY YEAR(createdAt), MONTH(createdAt)
 ORDER BY YEAR(createdAt), MONTH(createdAt)