[英]SUM with CASE.. Prevent divide by zero
我的查询:
SELECT
UPC,
SUM(
CASE WHEN WEEK <= 13 THEN COST_AMOUNT ELSE 0 END
) /
SUM(
CASE WHEN WEEK <= 13 THEN COST_QUANTITY ELSE 0 END
)
返回零除,因为如果upc没有WEEK <= 13
数据,则除数将为零。
我有此解决方案,但我需要为多个日期范围创建平均值,这似乎有点长。
SELECT
UPC,
SUM(
CASE WHEN WEEKS <= 13
THEN Cost_Amount
ELSE 0 END
) /
CASE WHEN
SUM(
CASE WHEN WEEKS<=13
THEN Cost_Quantity
ELSE 0 END
)=0
THEN 1
ELSE SUM(
CASE WHEN WEEKS<=13
THEN Cost_Quantity
ELSE 0 END
)
END
只需删除分母中的else
:
SELECT UPC,
(SUM(CASE WHEN WEEK <= 13 THEN COST_AMOUNT ELSE 0 END) /
SUM(CASE WHEN WEEK <= 13 THEN COST_QUANTITY END)
)
这将返回NULL
而不是错误。 如果要在这种情况下获取特定值,可以使用COALESCE()
。
您可以尝试分手查询-
SELECT
UPC,
SUM_COST_AMOUNT / DECODE(SUM_COST_QTY,0,1,SUM_COST_QTY)
FROM
(
SELECT
UPC,
SUM(
CASE WHEN WEEK <= 13 THEN COST_AMOUNT ELSE 0 END
) AS SUM_COST_AMOUNT,
SUM(
CASE WHEN WEEK <= 13 THEN COST_QUANTITY ELSE 0 END
) AS SUM_COST_QTY
FROM ..
..
..
..
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.