mysql选择每个月的记录数

Gre*_*eg 6 mysql

我需要在mysql中创建一个查询,该查询将返回12行(每月一行),用于选择月份名称和给定月份的记录数.我有两个表,一个month_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;
Run Code Online (Sandbox Code Playgroud)

这会返回类似于我期望的内容(选择12行,包含本月事件数,如果没有,则返回0):

**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
Run Code Online (Sandbox Code Playgroud)

但无论公司如何,它都会返回所有记录.我需要确保查询被过滤,我添加了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;
Run Code Online (Sandbox Code Playgroud)

当我添加where子句时,我的结果变为:

**month**    **cnt**
August       88
September    99
October      120
December     9
Run Code Online (Sandbox Code Playgroud)

有什么想法,为什么我在添加where子句时会丢失所有其他月份记录,即使我正在使用左连接?

arn*_*hgz 6

你正在使用a 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;
Run Code Online (Sandbox Code Playgroud)

注意AND events_tbl.company_id = 1是在LEFT JOIN