0

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

4

2 回答 2

1

只是因为好奇,我决定测试实际的 STDEV()。现在,我无法确定内置功能。

我很接近... 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
于 2016-10-09T21:45:42.713 回答
0

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

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

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

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

笔记:

  • square()函数可能有一些其他名称(例如power())。
  • sqrt()函数可能有其他名称。
  • 一般来说,这不是计算标准偏差的好方法。特别是,这是一个数值不稳定的算法(它对于有限数量的正常数来说工作得很好)。
  • 需要子查询,因为窗口函数不能作为聚合函数的参数。
于 2016-10-09T23:07:15.647 回答