我在MySQL数据库中有一个表,如下所示 - 是否可以在单个查询中计算总体的标准差?我可以找到计算一列数据的标准偏差的方法(即只是频率),我需要的是集合的标准差[1080,1090,1090,1090 ......,2000,2000,2000,2000 ,...]等?
Time Frequency
-----------------
1080 1
1090 10
2000 100
2010 50
2020 5
2030 3
答案 0 :(得分:2)
你基本上有两个选择。展开数据以使每个值具有多行,并使用std_pop()
。或者,自己实施计算。
标准偏差基本上是值之和减去平均值的平方根。如果我有正确的计算,你可以这样做:
select sqrt(sum(tf.frequency * power(tf.time - tfavg.avgtime, 2.0)) / tfavg.cnt)
from tf cross join
(select sum(time*frequency) / sum(frequency) as avgtime,
sum(frequency) as cnt
from tf
) tfavg;