我的桌子:
rating date
4 12/02/2013
3 12/02/2013
2.5 12/01/2013
3 12/01/2013
4.5 21/11/2012
5 10/11/2012
如果我在最近三个月(02,01,12)中将输入设为3,则评分结果的平均值应为
我尝试使用
GROUP BY
,但得到以下结果: rating month
3.5 02
2.75 01
第十二个月没有评级,所以没有输出.....
我想要的结果:
rating month
3.5 02
2.75 01
0 12
最佳答案
问题是您要返回不存在的月份。如果您没有带有日期的日历表,那么您将需要使用以下内容:
select d.mth Month,
coalesce(avg(t.rating), 0) Rating
from
(
select 1 mth union all
select 2 mth union all
select 3 mth union all
select 4 mth union all
select 5 mth union all
select 6 mth union all
select 7 mth union all
select 8 mth union all
select 9 mth union all
select 10 mth union all
select 11 mth union all
select 12 mth
) d
left join yourtable t
on d.mth = month(t.date)
where d.mth in (1, 2, 12)
group by d.mth
见SQL Fiddle with Demo