使用MySQL查询计算每x行的平均值

时间:2012-03-05 18:04:11

标签: mysql

我有一个像这样结构的MySQL表:

timestamp | messageVals
-----------------------
1325825203| 46.5
1325825306| 48
1325825404| 43.75
1325825835| 49.625
1325826003| 49.625
1325826055| 47.125
1325794709| 42.875

依此类推第四,它总共有超过2,000行。我想一次计算一组二十个的平均值,并且可能会为平均值添加另一列。所以每第二十行在avg列中都会有一个值,它是前面二十个值的平均值,然后重置并计算下一个二十的平均值。

          timestamp | messageVals | avg
          --------------------------------
          1325825203| 46.5        |
          1325825306| 48          |
          1325825404| 43.75       |
          1325825835| 49.625      |
          1325826003| 49.625      |
          1325826055| 47.125      |
(20th)    1325794709| 42.875      | 47.15

哪些是最容易理解的查询,将第三列填入平均值?

1 个答案:

答案 0 :(得分:2)

我不清楚你是否真的想要保留表中的平均值,或者只是在SELECT查询中计算它们。

假设是后者,你可以这样做:

set @rownum := 0;
set @sum := 0;

select ts,messageVals,the_avg
from (
  select ts,messageVals,
  @rownum := (@rownum + 1) as rownum, 
  @sum := IF(@rownum mod 20 = 1,0 + messageVals,@sum + messageVals) as running_sum,
  IF(@rownum mod 20 = 0,@sum / 20,NULL) as the_avg
  from so9571582
  order by ts
) s;