簡體   English   中英

Redshift除以零益智游戲

[英]Redshift Divide By Zero Puzzler

我用這段代碼得到0除錯:

CASE
WHEN DENOMINATOR >= 0
THEN SUM(INT1 * INT2 / DENOMINATOR)
ELSE 0
END AS RATIO

但是,當我更改為以下代碼時,它工作正常。

CASE
WHEN DENOMINATOR >= 0
THEN SUM(INT1) * INT2 / DENOMINATOR
ELSE 0
END AS RATIO

有人可以幫我理解原因,以便將來可以避免這種情況嗎? BTW,第一個樣本在Vertica中運行。 我實現了總結需要求和的東西而不是在求和之前進行計算是一種更好的編程實踐。 不過仍然很好奇。

我認為避免被零除的最好的方法是使用nullif()

SUM(INT1 * INT2 / NULLIF(DENOMINATOR, 0))

要么:

SUM(INT1) * INT2 / NULLIF(DENOMINATOR, 0)

這返回NULL ,我覺得這對於零除零情況更為明智。 如果您願意,可以添加COALESCE()以獲得0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM