计算每个月的记录,包括那些结果为零的记录

时间:2017-12-12 07:05:25

标签: mysql count

如何计算过去一年中每个月MySql数据库的结果数量,其中可能不存在特定月份的记录,但它会显示为计数为零?例如,我想计算每个月发生的注册数量,并在没有注册的情况下包括那些结果。

    Month    Count
      1        4
      2        2
      .        .
      .        .
      6        0
      .        .
      .        .

1 个答案:

答案 0 :(得分:1)

尽管存在很多答案,但我发现其中大部分都难以阅读和理解。但是,使用派生表,我认为使用下面给出的查询更容易,我们试图从用户表中计算过去12个月的注册数量:

select derived.mm as month, count(u.reg_date) as count from (
    SELECT 1 mm UNION ALL SELECT 2 UNION ALL SELECT 3 
    UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7  
    UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 
    UNION ALL SELECT 12
) derived
left join user u
on derived.mm = month(reg_date) 
    and u.reg_date > LAST_DAY(DATE_SUB(curdate(),INTERVAL 1 YEAR))
group by derived.mm

如何运作

  • 它派生了一个表(别名派生),它返回12行,每12个月1个,即1到12个[在子查询中;第2行]。
  • 它将注册日期的月份编号与给定派生表中的相应月份编号相连接。 [没有注册的月份,加入的reg_date结果为空]
  • 并且条款与往常一样,计算过去12个月[当前月份将被指数为12]
  • 按原始月份索引对结果进行分组。
  • 希望这可以帮助别人。