MySQL聚合函数在其他聚合函数中

时间:2011-07-11 21:50:58

标签: mysql aggregate aggregate-functions

我有一张有帖子的桌子。喜欢(id int,date datetime)。 如何通过一个sql请求选择每个月的平均帖子数?

谢谢!

2 个答案:

答案 0 :(得分: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

说明:因为您在聚合上进行聚合,所以无法对查询进行查询:

  • 内部查询计算每天的数量并捕获月份。
  • 外部查询平均此计数,按月分组。

答案 1 :(得分: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);

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