【问题标题】:In SQL, how to calculate standard deviation with a row excluded from the calculation?在 SQL 中,如何计算从计算中排除的行的标准差?
【发布时间】:2015-10-05 17:08:32
【问题描述】:

我有很多行,其中有 ID、'Group' 和 Value 列。我想为每个Group 计算Value 列的标准偏差。在计算中,我必须排除组中的每条记录并进行计算,然后将结果分配给行。我怎样才能实现它?

非常感谢。

编辑:我正在使用 MS SQL Server 2008 R2

编辑2:

假设我们有一张桌子

ID    Group    Value
1       A       2.5
2       A       4.1
3       B       3.8
4       B       11.2
5       B       15.4
6       C       0.8
7       C       7.1
8       C       1.0
9       B       5.2
10      A       6.9

预期的输出是

ID    Group    Value     Std(pseudo values)
1       A       2.5       xxx
2       A       4.1       xxx
3       B       3.8       xxx
4       B       11.2      xxx
5       B       15.4      xxx
6       C       0.8       xxx
7       C       7.1       xxx
8       C       1.0       xxx
9       B       5.2       xxx
10      A       6.9       xxx

某个组的标准差的计算分配给Std 列中的各个行。但为了保证独立性,我们使用std_x1 = STD(x2, x3, x4, ...)

【问题讨论】:

  • 答案可能取决于您未能指定的数据库引擎。
  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?
  • I have to exclude each of the record in the group out and carry out the calculation, then assign the result to the row 是什么意思?
  • 请输入示例和预期输出

标签: sql sql-server-2008 sql-server-2008-r2


【解决方案1】:

要根据假设 std_x1 = STD(x2, x3, x4, ...)std_x2 = STD(x3, x4, x5, ...) 计算 STD,您可以使用以下查询:

SELECT  t.ID, 
        t.[Group], 
        t.Value,
        STDEV(t.Value) OVER (PARTITION BY [GROUP] ORDER BY t.ID ASC ROWS UNBOUNDED FOLLOWING) AS std
FROM    tbl t

要根据假设 std_x1 = STD(x2, x3, x4, ...)std_x2 = STD(x1, x3, x4, x5, ...) 计算 STD,您可以使用以下查询:

SELECT  t.ID, 
        t.[Group], 
        t.Value,
        (SELECT STDEV(t1.value)
         FROM   tbl t1      
         WHERE t1.[Group] = t.[Group]
         AND t1.ID <> t.ID) AS Std
FROM    tbl t

【讨论】:

  • 嗨,拉法尔。谢谢你的回答,太棒了。但是,我的问题中的std 已简化,以便回答者轻松理解问题。其实std是一个加权std,所以可以提取为SQRT[sum(Vi - mean)*exp(Wi)/(N*exp(Wi))],所以代码中包含了聚合函数。我想知道上述答案是否也适用于这种情况?非常感谢。
  • 顺便说一句,我的情况是基于第二个假设。
  • 我认为这个解决方案可以在你的场景中使用。如果您向公式提供 Vi、meam、Wi 等信息,我会尝试为您编写此查询。
猜你喜欢
  • 1970-01-01
  • 2019-09-17
  • 2019-08-15
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多