-1

我有一个看起来像这样的表:

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)。

我想获得一个新字段的平均标准偏差,它返回 SALES.A + SALES.B 的总和sum(IS.NULL(SALES.A,0) + ISNULL(SALES.B,0))

我遇到的问题是 STDEVP 似乎在计算字段时失败,并且返回的结果无效。

我一直在尝试:

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

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

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

请问有人能找到一个近似值吗?

4

1 回答 1

0

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

不过,我可以看到问题所在。正在为每个SUM()组计算一个值,然后您将采用该值的标准偏差。因为你不能嵌套聚合函数,所以你把它变成了一个窗口函数。

摆脱sum(). 以下应该在 SQL Server 中工作:

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

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

于 2017-12-04T16:57:00.567 回答