我正在收集页面加载时间并将它们存储在SQL表中。每一分钟,我都想"卷起"这些统计数据,存储命中数,平均加载时间和加载时间的标准差。
过了一会儿,我想"卷起"这些十分钟的小时间隔,保持总点击次数,平均页面加载时间和"汇集"标准差。
以下是我编写的测试脚本的关键部分:
select
-- Pooled standard deviation
case when sum(NumHits) = 1
then null -- stddev is undefined when sample size = 1
else
sqrt(
(
sum(
(NumHits - 1) * square(StdDev) + NumHits * square(cast(AvgLoadTime as int))
) -
sum(NumHits) * square(sum(cast(NumHits as int) * AvgLoadTime) / sum(NumHits))
) / -- numerator
(
sum(NumHits) - 1
) -- denominator
)
end 'StdDev'
您还可以看到SQL Fiddle of the entire test script。
汇总标准差数学基于维基百科的这个等式:
我的问题是:
更新
添加了case
语句来处理所有样本大小总和= 1的情况。在这种情况下,标准差是未定义的。