【发布时间】:2022-06-17 19:50:17
【问题描述】:
只是想知道有人知道 STDEV() 背后的公式(适用于任何版本的 sql server),或者为什么这些小数等值的标准偏差不同。
我的目标是向我们的 QA 部门解释这种计算上的差异,然后他们可以向我们的客户解释。
小数的 SQL 函数 STDEV() 似乎永远无法匹配 excel,非十进制整数似乎没有问题。
我正在尝试计算样本的偏差,而不是总体。
示例值:99.99991、99.99992
Excel STDEV(或任何在线标准差计算器):7.07107E-06
SQL:7.13664510111607E-06
我尝试了多个版本的 SQL Server,以及 SQL 和 Excel 2007 和 2019 中此函数的所有变体,我永远无法让它们与这些值匹配。
显然,与本网站上的计算相比,SQL 所做的事情略有不同:
https://www.mathsisfun.com/data/standard-deviation-calculator.html
tSQL 重现:
declare @table table (theNumber float)
insert into @table (theNumber) Values (99.99991), (99.99992)
select STDEV(theNumber) from @table
任何帮助将不胜感激!
谢谢!
编辑:如果其他人遇到此问题,请使用以下功能:
''' CREATE FUNCTION[dbo].[StandardDevationSample](@Values as TVP_FLOAT READONLY) RETURNS DECIMAL(12,6) 作为
开始
声明@ItemCount INT, @总和浮动, @平均浮动, @SumOfDifferencesSquared 浮点数, @Variance 浮点数
声明@Differences TABLE ( [值] 浮点数 )
声明@DifferencesSquared TABLE ( [值] 浮点数 )
SELECT @ItemCount = (SELECT Count(ID) FROM @Values)
IF(@ItemCount
SELECT @Sum = (SELECT Sum(ID) FROM @Values)
选择@Mean = (@Sum / @ItemCount)
插入@Differences([值]) 选择(ID - @Mean) 来自@值
插入@DifferencesSquared([值]) 选择正方形([值]) 来自@差异
SELECT @SumOfDifferencesSquared = Sum([值]) 来自@DifferencesSquared
选择@Variance = @SumOfDifferencesSquared / (@ItemCount - 1)
返回转换(十进制(18,9),平方(@Variance))
返回 0
结束 去 '''
【问题讨论】:
-
这可能是由于您使用了浮点数据类型 - 请尝试使用小数代替
-
与小数相同的结果
标签: sql sql-server excel tsql stdev