【问题标题】:SQL Server STDEV() Function for decimals not matching Excel STDEV() Function与 Excel STDEV() 函数不匹配的小数的 SQL Server STDEV() 函数
【发布时间】: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


【解决方案1】:

如果输入只知道小数点后 5 位,那么在标准差结果中使用任何小数都是有问题的。

考虑:

declare @table table (groupNo int, theNumber float)
insert into @table (groupNo, theNumber) Values
(1, 99.9999051), (1,99.9999249),
(2, 99.99991), (2,99.99992),
(3, 99.9999149), (3,99.9999151)
select groupNo,ROUND(theNumber,5) from @table
select groupNo,STDEV(theNumber) from @table group by groupNo

第一个结果集是这样的:

groupNo (No column name)
1   99.99991
1   99.99992
2   99.99991
2   99.99992
3   99.99991
3   99.99992

第二个结果集是这样的:

groupNo (No column name)
1   1.40160927359572E-05
2   7.13664510111607E-06
3   1.9073486328125E-06

所以我建议你应该向你的用户提供最多的计算是7E-06,即使这是粗略的,在这一点上 SQL 和 Excel 是一致的。

【讨论】:

  • 不幸的是,由于提供了校准证书,因此客户有时希望看到小数点后 3-4 位的值。我最终在 SQL 中创建了自己的函数,该函数以与 excel 相同的方式进行计算,世界其他地方也这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多