【问题标题】:mysql select the count of records for every monthmysql选择每个月的记录数
【发布时间】:2012-08-07 07:56:42
【问题描述】:

我需要在 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 子句时会丢失所有其他月份的记录,即使我使用的是左连接?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您使用的是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 = 1LEFT JOIN

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-19
      • 1970-01-01
      • 2021-11-01
      • 2021-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      相关资源
      最近更新 更多