mysql选择每个月的记录数
问题描述:
我需要在mysql中创建一个查询,它将返回12个行(每个月有一行),用于选择月份名称和给定月份的记录数。我有两个表,一个months_tbl和events_tbl。 events_tbl中的每条记录都有一个日期时间列和一个company_id列。mysql选择每个月的记录数
我目前正在做这样的事情(注意我没有WHERE子句COMPANY_ID尚):
SELECT months_tbl.month, COUNT(events_tbl.event_id) cnt
FROM months_tbl
LEFT JOIN events_tbl ON months_tbl.month_id = MONTH(events_tbl.appt_date_time)
GROUP BY months_tbl.month
ORDER BY months_tbl.month_id ASC;
这将返回类似选择什么,我期待(12行,用计数月活动,或零,如果什么都没有):
**month** **cnt**
January 0
February 0
March 0
April 0
May 0
June 0
July 0
August 88
September 99
October 120
November 0
December 9
但是它返回所有记录,而不管公司。我需要确保查询被这样过滤,我加了where子句:
SELECT months_tbl.month, COUNT(events_tbl.appt_id) cnt
FROM months_tbl
LEFT JOIN events_tbl ON months_tbl.month_id = MONTH(events_tbl.appt_date_time)
WHERE events_tbl.company_id = 1
GROUP BY months_tbl.month
ORDER BY months_tbl.month_id ASC;
当我添加的where子句我的结果变成:
**month** **cnt**
August 88
September 99
October 120
December 9
任何想法,为什么我失去了所有其他月份记录何时添加where子句,即使我正在使用左连接?
答
您使用的是LEFT JOIN
,但在你的WHERE语句您使其成为一个 '正常' JOIN
尝试这样写的:
SELECT months_tbl.month, COUNT(events_tbl.appt_id) cnt
FROM months_tbl
LEFT JOIN events_tbl ON (months_tbl.month_id = MONTH(events_tbl.appt_date_time)
AND events_tbl.company_id = 1
)
GROUP BY months_tbl.month
ORDER BY months_tbl.month_id ASC;
注意AND events_tbl.company_id = 1
在LEFT JOIN
我的解决方案能帮助你吗? – arnoudhgz 2012-08-07 12:07:20