我有一个表(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')
但它打印出一个非常大的数字。我做错了什么?
答案 0 :(得分:2)
试试这个。这会将数据分成几个月,然后执行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);
我个人推荐这个,更漂亮。然后,您可以在应用层上完成所有演示文稿。
答案 1 :(得分:1)
试试这个。按月对结果进行分组:
选择月份(日期)作为月份,计数(id)作为计数FROM myItems日期之间的日期' 2013-10-01'和' 2013-11-30'按月分组(日期);
输出结果示例:
月|计数
10 | 100
11 | 200
答案 2 :(得分:0)
可能你没有使用加入,你只是给出条件。首先尝试将这两个表与主键或一些唯一且通用的数据列连接起来。然后尝试执行上面的查询。 Somthiong是这样的: -
SELECT Count(okt.id) AS Oktober, Count(nov.id) AS November
FROM `myItems` as okt,
`myItems` as nov
WHERE okt.id = nov.id
AND (okt.date between '2013-10-01' and '2013-10-31')
OR (nov.date between '2013-11-01' and '2013-11-30');
这可能对你有帮助。