在 DB2 上不能除以零错误

OVO*_*OVO 1 sql db2 division

大家好,我正在使用 DB2!我有一个查询计算 30 天内的 MPG,它是通过捕获里程表的变化作为分子和燃料购买的总和作为分母来完成的。然而,我有一个特定的单位让我有些悲伤!显然他在过去 30 天内没有购买任何燃料,因此他导致我的查询返回错误

Division by zero was attempted. SQLState = 22012
Run Code Online (Sandbox Code Playgroud)

我以为我可以很聪明并使用coalesce它,但它是一种不受支持的类型。这是查询mpg!

ROUND(((SELECT MAX(ODOMETER)-MIN(ODOMETER) FROM ODOHIST O 
WHERE READINGDATE >= CURRENT DATE - 30 DAYS AND O.UNIT_ID = DEFAULT_PUNIT)/
(SELECT SUM(T2.VOL_PFUEL) FROM FC_POS T2 WHERE T2.DRIVER_ID = DRIVER.DRIVER_ID AND POS_DATE >= CURRENT DATE - 30 DAYS)),2) AS MPG_30DAYS
Run Code Online (Sandbox Code Playgroud)

而不是实际返回 0 的字段,它只是空白,那么是否有类似的函数coalesce会强制返回值?

谢谢你的帮助!

卡内尔是我心痛的根源

Gor*_*off 5

这意味着它的计算结果为 0:

(SELECT SUM(T2.VOL_PFUEL)
 FROM FC_POS T2
 WHERE T2.DRIVER_ID = DRIVER.DRIVER_ID AND POS_DATE >= CURRENT DATE - 30 DAYS
)
Run Code Online (Sandbox Code Playgroud)

我的建议是NULLIF()在语句中使用:

(SELECT NULLIF(SUM(T2.VOL_PFUEL), 0)
 FROM FC_POS T2
 WHERE T2.DRIVER_ID = DRIVER.DRIVER_ID AND POS_DATE >= CURRENT DATE - 30 DAYS
)
Run Code Online (Sandbox Code Playgroud)

这将替换0with NULL,这应该可以解决问题。