如果没有结果,按月或0分组?

时间:2014-04-19 18:42:24

标签: mysql

我有以下查询

SELECT MONTH(date_added), COUNT(*)
FROM invite
WHERE YEAR(date_added) = 2013
GROUP BY MONTH(date_added)

它的工作原理非常好,但我的问题是如果一个月没有结果它没有输出月份,我需要用0来代替。

我不想创建一个包含所有12个月值的表格。而且我不想运行12个查询,还有其他方法可以执行此操作吗?

2 个答案:

答案 0 :(得分:2)

您不必“创建包含12个月值的表格”。您可以在查询中执行此操作:

SELECT m.mon, COUNT(i.date_added)
FROM (select 1 as mon 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
     ) m left outer join
     invite i
     on m.mon = i.month(date_added) and year(date_added) = 2013
GROUP BY m.mon;

答案 1 :(得分:0)

这是一种俗气的方式:

create table months (int monthnum);

将数字1到12插入数月,因此它只是一个包含1列和12行的表。

select monthnum, coalesce(ct, 0) from months left join (
   select month(date_added) Mon, count(*) ct from invite
   where year(date_added)=2013 group by Mon)
   on monthnum = Mon
如果月份缺失,

Coalesce会给你一个零而不是null。