计算字段的 STDEVP

STDEVP for calculated fields

我有一个 table 看起来像这样:

ID       CHANNEL    VENDOR  num_PERIOD  SALES.A SALES.B
000001  Business    Shop    1            40       30
000001  Business    Shop    2            60       20
000001  Business    Shop    3            NULL     30

ID、CHANNEL 和 VENDOR 的多种组合,以及它们随时间变化的销售记录 (num_PERIOD)。

我想得到一个新字段的平均标准偏差,即 returns SALES.A + SALES.B sum(IS.NULL(SALES.A,0) + ISNULL(SALES.B,0)).

的总和

我遇到的问题是 STDEVP 似乎无法计算字段,结果 returns 无效。

我一直在尝试:

select ID, CHANNEL, VENDOR, stdevp(sum(isnull(SALES.A,0) + ISNULL(QSALES.B,0))) OVER (PARTITION BY  ID, CHANNEL, VENDOR) as STDEV_SALES
      FROM TABLE
GROUP BY ID, CHANNEL, VENDOR

但是,我得到的结果总是 0NULL

我要获取的是每个ID、CHANNEL和VENDOR随时间变化的平均标准差(num_PERIOD)

有人能找到这个的近似值吗?

您的查询与示例数据不匹配。

不过我能看出问题所在。 SUM() 计算每个组的单个值,然后您计算该值的标准差。因为你不能嵌套聚合函数,所以你把它变成了一个window函数。

去掉 sum()。以下应在 SQL 服务器中工作:

SELECT ID, CHANNEL, VENDOR, 
       STDEVP(COALESCE(SALES.A, 0) + COALESCE(QSALES.B, 0))  as STDEV_SALES
FROM SALES . . .
     QSALES
GROUP BY ID, CHANNEL, VENDOR;

我也会 return COUNT(*) 。 . .如果少于 3 行,则标准差没有意义。 (好吧,它是为两个值定义的,但不是很有用。)