我有以下查询
SELECT MONTH(date_added), COUNT(*)
FROM invite
WHERE YEAR(date_added) = 2013
GROUP BY MONTH(date_added)
它的工作原理非常好,但我的问题是如果一个月没有结果它没有输出月份,我需要用0来代替。
我不想创建一个包含所有12个月值的表格。而且我不想运行12个查询,还有其他方法可以执行此操作吗?
答案 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。