繁体   English   中英

用CASE求和..防止被零除

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM