/ / Calculate Average Cada x linhas com MySQL Query - mysql

Calcular Média de Todas as Linhas x com MySQL Query - mysql

Eu tenho uma tabela MySQL estruturada da seguinte forma:

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

E assim por diante e assim em quarto, tem pouco mais de 2.000total de linhas. Eu gostaria de calcular a média de um conjunto de vinte por vez, e seria adicionar outra coluna para a média. Então, cada vigésima linha teria um valor na coluna avg que seria uma média dos vinte valores anteriores, que então redefinir e fazer a média dos próximos vinte.

          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

Qual é a consulta mais fácil de entender que preencherá a terceira coluna com as médias?

Respostas:

2 para resposta № 1

Não está claro para mim se você realmente deseja persistir os valores médios em sua tabela ou apenas calculá-los em uma consulta SELECT.

Assumindo que é o último, você poderia fazer algo assim:

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;