如何在没有内置函数的情况下计算sql中的标准偏差

时间:2016-10-09 20:59:43

标签: sql standards deviation

我的数据库中有一列数字。我该如何计算标准差?我不想使用stddev函数。

2 个答案:

答案 0 :(得分:1)

因为我好奇,我决定测试实际的STDEV()。现在,我无法确定内置功能。<​​/ p>

我很接近...... 0.000141009220002264或0.00748%折扣

此外,总平均值和计数必须转换为浮点数(方差随小数值增大)

下面的例子是我的10年期收益率的国债利率表(不重要)

Select SQLFunction = Stdev([TR_Y10]) 
      ,ManualCalc  = Sqrt(Sum(Power(((cast([TR_Y10] as float)-B.TotalAvg)),2) / B.TotalCnt))
      ,Variance    = Stdev([TR_Y10]) - Sqrt(Sum(Power(((cast([TR_Y10] as float)-B.TotalAvg)),2) / B.TotalCnt))
 From [Chinrus-Shared].[dbo].[DS_Treasury_Rates]
 Join (Select TotalAvg=Avg(cast([TR_Y10] as float)),TotalCnt=count(*) From [Chinrus-Shared].[dbo].[DS_Treasury_Rates]) B on 1=1

返回

SQLFunction         ManualCalc          Variance
1.88409468982299    1.88395368060299    0.000141009220002264

答案 1 :(得分:0)

标准差是方差的平方根除以n。

方差是平均值与观测值之差的平方和。

因此,在大多数数据库中,您可以使用窗口函数:

select sqrt(avg(var))
from (select square(t.x - avg(t.x) over ()) as var
      from t
     ) t;

注意:

  • square()函数可能有其他名称(例如power())。
  • sqrt()函数可能有其他名称。
  • 这是一般计算标准偏差的好方法。特别是,这是一个数值不稳定的算法(对于有限数量的正常数字,它可以正常工作)。
  • 需要子查询,因为窗口函数不能作为聚合函数的参数。