计算字段的 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
但是,我得到的结果总是 0
或 NULL
。
我要获取的是每个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 行,则标准差没有意义。 (好吧,它是为两个值定义的,但不是很有用。)
我有一个 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
但是,我得到的结果总是 0
或 NULL
。
我要获取的是每个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 行,则标准差没有意义。 (好吧,它是为两个值定义的,但不是很有用。)