【问题标题】:Calculating Average over different intervals计算不同间隔的平均值
【发布时间】:2013-02-28 16:06:29
【问题描述】:

在 mysql 中,我正在计算不同时间间隔(3 天、7 天、30 天、60 天等)的相同指标的平均值,并且我需要将结果放在每个 @987654321 的一行中@。

目前,我在每个间隔都使用一个 Join。鉴于我必须为许多不同的商店计算这个,并且在几个不同的时间间隔内,有没有更清洁和/或更有效的方法来完成这个?

下面是我目前使用的代码。

提前感谢您的帮助

SELECT T1.id, T1.DailySales_3DayAvg, T2.DailySales_7DayAvg
FROM(
    SELECT id, avg(DailySales) as 'DailySales_3DayAvg'
    FROM `SalesTable`
    WHERE `Store`=2 
      AND `Date` >= DATE_SUB('2012-07-28', INTERVAL 3 DAY)
      AND `Date` < '2012-07-28' 
) AS T1

JOIN(
    SELECT id, avg(DailySales) as 'DailySales_7DayAvg'
    FROM `SalesTable`
    WHERE `Store`=2 
      AND `Date` >= DATE_SUB('2012-07-28', INTERVAL 7 DAY)
      AND `Date` < '2012-07-28' 
) AS T2

ON T1.ArtistId = T2.ArtistId

结果在哪里:

  id   DailySales_3DayAvg   DailySales_7DayAvg
3752              1234.56              1114.78
...

【问题讨论】:

  • 不,我不认为有...除非您想在从 mySQL 获取数据之后在接收程序中生成平均值...尽管子查询至少会删除'加入'。 (但并没有更漂亮)
  • “平均”是什么意思? “超过一个区间”是什么意思?目前,您正在获取 SalesTable(对于给定商店)中属于相应日期范围内的所有记录的平均值 DailySales。但是,这不是该期间的“平均每日销售额”:考虑商店在时间间隔内的特定日期有多个(或没有)记录时会发生什么情况:也许您希望取所有销售额的总和并除以天数?更明确地定义问题,然后我们可以帮助提出可能的答案。
  • @RefugnicEternium,感谢您的回复。数据是历史数据,然后进入 R。我可以在 R 中轻松计算它,但在 sql 中执行它要快得多。看起来我坚持使用代码。谢谢。
  • @eggyal,感谢您的反馈,但我对此非常了解。此外,平均值按预期计算(即,如果有缺失值,例如 7 天内只有 3 条记录,则平均值计算为sum(vals) / 3)。

标签: mysql join average


【解决方案1】:

您可以使用这样的查询 -

SELECT
  id,
  SUM(IF(date >= '2012-07-28' - INTERVAL 3 DAY, DailySales, 0)) / 
    COUNT(IF(date >= '2012-07-28' - INTERVAL 3 DAY, 1, NULL)) 'DailySales_3DayAvg',

  SUM(IF(date >= '2012-07-28' - INTERVAL 7 DAY, DailySales, 0)) / 
    COUNT(IF(date >= '2012-07-28' - INTERVAL 7 DAY, 1, NULL)) 'DailySales_7DayAvg'
FROM
  SalesTable
WHERE
  Store = 2 AND Date < '2012-07-28'
GROUP BY
  id

【讨论】:

  • 我想补充一点,如果这很重要,您还可以按商店分组。
【解决方案2】:

如果您想提取实时数据,我认为您无法以任何其他方式执行此操作。但是,如果您能负担得起显示稍微过时的数据,您可以预先计算每个项目的这些平均值(例如每天一次或两次)。

您可能想查看Event Scheduler,它允许您将所有内容保存在 MySQL 中。

【讨论】:

  • 感谢您的回复。我来看看调度器。干杯
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
  • 2019-11-10
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多