我有一个看起来像这样的表:
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
但是,我所看到的结果始终为0
或NULL
。
我想要获得的是每个ID,CHANNEL和VENDOR的平均标准偏差(num_PERIOD)
。
有人可以找到这个的近似值吗?
答案 0 :(得分: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行,则标准偏差没有意义。 (好的,它定义为两个值,但不是很有用。)