说,我有一个如下表:

id, c1, c2, c3, ..... c365, StdDeviation
1 , 3 , 7 , 1 , ..... c365, null
2 , 4 , 5 , 2 , ..... c365, null
3 , 5 , 3 , 4 , ..... c365, null
4 , 6 , 2 , 6 , ..... c365, null
5
.
.
millions


我想使用MySql获得以下内容

id, c1, c2, c3, ..... c365, StdDeviation
1 , 3 , 7 , 1 , ..... c365, *standard deviation of this row*
2 , 4 , 5 , 2 , ..... c365, *standard deviation of this row*
3 , 5 , 3 , 4 , ..... c365, *standard deviation of this row*
4 , 6 , 2 , 6 , ..... c365, *standard deviation of this row*
5
.
.
millions


我不能使用STDDEV(),因为它确实可以垂直工作。有什么办法吗?

最佳答案

好吧,标准差是平均方差的平方根。您可以阅读here

使用标准公式进行计算需要很多算法。格式如下:

select sqrt((pow(c1 - cavg, 2) + pow(c2 - cavg, 2) + . . .
            ) / 365
           ) as stdev
from (select t.*,
             (c1 + c2 + c3 + . . . + c365)/365 as cavg
      from yourtable t
     ) t


这些公式很长。我建议您使用Excel之类的工具自动生成它们。

可以使用其他公式,但是它们仍然涉及对值的平方求和并取值之和的平方-因此,这不会简化公式的编写。

当数据以更标准化的格式存储(每个数据点一行)时,更容易表达公式。这就是聚合函数std()的作用。

09-07 20:09