mysql选择每个月的记录数

mysql选择每个月的记录数,mysql,Mysql,我需要在mysql中创建一个查询,返回12行(每个月一行)来选择月份名称和给定月份的记录数。我有两张桌子,一张月桌和一张活动桌。事件tbl中的每条记录都有一个日期时间列和一个公司id列 我目前正在做类似的事情(注意,我还没有WHERE company\u id条款): 这将返回与我期望的类似的结果(选择12行,其中包含当月的事件计数,如果没有,则返回零): 但是,它会返回所有记录,而不考虑公司。我需要确保查询已被筛选,因此,我添加了where子句: SELECT months_tbl.month

我需要在mysql中创建一个查询,返回12行(每个月一行)来选择月份名称和给定月份的记录数。我有两张桌子,一张月桌和一张活动桌。事件tbl中的每条记录都有一个日期时间列和一个公司id列

我目前正在做类似的事情(注意,我还没有WHERE company\u id条款):

这将返回与我期望的类似的结果(选择12行,其中包含当月的事件计数,如果没有,则返回零):

但是,它会返回所有记录,而不考虑公司。我需要确保查询已被筛选,因此,我添加了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子句时会丢失所有其他月份的记录吗,即使我使用的是左连接

您使用的是
左连接
,但在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) 
    AND events_tbl.company_id = 1
  )
GROUP BY months_tbl.month
ORDER BY months_tbl.month_id ASC;
注意
和events\u tbl.company\u id=1
左连接中

**month**    **cnt**
August       88
September    99
October      120
December     9
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;