MySQL平均二级聚合

Posted

技术标签:

【中文标题】MySQL平均二级聚合【英文标题】:MySQL average two level agregation 【发布时间】:2018-08-13 09:43:12 【问题描述】:

假设我在 mysql 中有一个包含四个字段(id、week、day、value)的表。 id 字段是设备的标识符,每天需要多个值。

我想要的是计算每周的平均价值。结果将是具有三个字段(id、week、average_week_day_value)的其他表,其中平均值不是一周的平均值,而是一周的平均值。我的意思是:首先我们计算日均值,然后将周日均值计算为每周日均值的平均值。

现在,我用一个中间表(id、week、day、average-day-value)分两步实现它。有了中间表后,很容易计算出最终表:(id, week, average_week_day_value)

我可以一步完成吗?

编辑

第一步查询:

INSERT INTO daily (id,week,day,average)
   SELECT id, week, day, avg(value)
   FROM table_values
   GROUP BY day

第二步查询:

INSERT INTO weekly (id,week,avg)
    SELECT id,week,avg(average)
    FROM daily
    GROUP BY week

【问题讨论】:

您的查询在哪里???如果不提供信息,您将如何寻求帮助??? 对于给出的信息,我的答案是聚合它,然后再聚合它。 我写了一个示例查询。问题是因为字段的数量有点复杂,但这就是本质。 我建议你写一个正确的查询。在您的 GROUP BY 中包含所有非聚合列。您的两个查询甚至都没有在其他 dbms 中运行。 【参考方案1】:

您可以将第一个查询放在子查询中。

SELECT week, AVG(day_avg)
FROM (
    SELECT week, day, AVG(value) AS day_avg
    FROM table_values
    GROUP BY week, day
) d
GROUP BY week

【讨论】:

以上是关于MySQL平均二级聚合的主要内容,如果未能解决你的问题,请参考以下文章

MySQL聚合函数

mysql之聚合函数

MySQL的聚合函数

MySQL的聚合函数

使用核心数据聚合每日平均值,移动平均线

MySQL函数的聚合函数