2011-07-11 152 views
1

我有一个包含帖子的表格。像(id int,date datetime)。 如何使用一个sql请求选择每月平均帖子数?其他聚合函数中的MySQL聚合函数

谢谢!

+1

您的意思是“过去30天的平均值”,或“该日历月的平均值”?您想如何报告不完整月份的平均值? –

回答

3

这应该为你做它:

select month, avg(posts_per_day) 
from (select day(date), month(date) as month, count(*) as posts_per_day 
     from posts group by 1,2) x 
group by 1 

解释:因为你在聚集做一个汇总,没有让周围的查询做一个查询:

  • 内查询计算每天的数量并捕获月份。
  • 外部查询按月计算这个计数的平均值。
+0

是的。这样可行。 但我确定有一个请求没有选择在选择:) 但无论如何谢谢! –

0

你可以得到每月的职位数是这样的:

SELECT COUNT(*) AS num_posts_per_month FROM table GROUP BY MONTH(date); 

现在我们需要的天数在一个月:

SELECT COUNT(*)/DATEDIFF(MAKEDATE(YEAR(date), MONTH(date)) + INTERVAL 1 MONTH, MAKEDATE(YEAR(date), MONTH(date))) AS avg_over_month 
FROM table GROUP BY MONTH(date); 

这将得到的平均数帖子日历月中每天的帖子。也就是说,本月的平均值将继续上升,直到月底。如果您想要在当月的实际平均值,则必须输入一个条件才能获得真实的经过天数。