我有一个表 (myItems),其中包含一个项目“id
”和“date
”。现在我想读出,每个月有多少项目(我也想区分2013年10月和2014年10月)。
我开始于:
SELECT Count(okt.id) AS Oktober, Count(nov.id) AS November
FROM `myItems` as okt,
`myItems` as nov
WHERE (okt.date between '2013-10-01' and '2013-10-31')
OR (nov.date between '2013-11-01' and '2013-11-30')
但是它打印出一个大得离谱的数字。我做错了什么?
最佳答案
试试这个。这会将数据分成几个月,然后执行 COUNT :
SELECT SUM(CASE WHEN MONTH(date) = 10 THEN 1 ELSE 0 END) AS Oktober
, SUM(CASE WHEN MONTH(date) = 11 THEN 1 ELSE 0 END) AS November
FROM `myItems`
演示:SQL Fiddle
集成了 YEAR:
SELECT 2013 as Year
, SUM(CASE WHEN MONTH(date) = 10 THEN 1 ELSE 0 END) AS Oktober
, SUM(CASE WHEN MONTH(date) = 11 THEN 1 ELSE 0 END) AS November
FROM `myItems`
WHERE YEAR(date) = 2013
UNION ALL
SELECT 2014 as Year
, SUM(CASE WHEN MONTH(date) = 10 THEN 1 ELSE 0 END) AS Oktober
, SUM(CASE WHEN MONTH(date) = 11 THEN 1 ELSE 0 END) AS November
FROM `myItems`
WHERE YEAR(date) = 2014;
;
演示:Fiddle
灵感来自@user77318
SELECT YEAR(date) as Year, month(date) as month, count(id) as count
FROM myItems
GROUP BY YEAR(date), MONTH(date);
个人推荐这个,比较漂亮。然后你就可以在应用层做所有的展示工作了。
关于mysql - 如何根据时间(月、年)统计记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24056272/