我有一个数据库,其中的表格包含一些图片的信息,每行包含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月份开始,第二个查询就会停止,因为数据结束时,第一个查询为什么不返回所有结果?
答案 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)