我需要在 mysql 中制作一个查询,该查询将返回 12 行(每个月一行),用于选择月份名称和给定月份的记录数。我有两个表,一个months_tbl 和events_tbl。events_tbl 中的每条记录都有一个 datetime 列和一个 company_id 列。
我目前正在做类似的事情(注意我还没有 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 子句时会丢失所有其他月份的记录,即使我使用的是左连接?