我的桌子:

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

08-03 19:37