说,我有一个如下表:
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()
的作用。