如何计算SQL中的合并标准差?

时间:2017-11-07 18:27:09

标签: sql tsql statistics query-performance rum

我正在收集页面加载时间并将它们存储在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

汇总标准差数学基于维基百科的这个等式:

Pooled standard deviation equation

我的问题是:

  1. 在SQL中计算合并标准差的最佳方法是什么?
  2. 它会破坏性能吗?
  3. 更新

    添加了case语句来处理所有样本大小总和= 1的情况。在这种情况下,标准差是未定义的。

0 个答案:

没有答案