我收到此错误:错误:除以零。 SQL 状态:22012
下面是我的查询-
UPDATE USR
SET PRCNT_SATSFCTN = (SELECT (SELECT COUNT(*)
FROM ORDR
WHERE USR.USR_ID = ORDR.USR_ID AND
STSFD_SW = 'Y') * 100 / COUNT(*)
FROM ORDR
WHERE USR.USR_ID = ORDR.USR_ID)
最佳答案
你可以试试:
UPDATE usr
SET prcnt_satsfctn = o.share
FROM (
SELECT usr_id
,(count(CASE WHEN stsfd_sw = 'Y' THEN 1 ELSE NULL END) * 100)
/ count(*) AS share -- cannot be NULL!
FROM ordr
GROUP BY 1
) o
WHERE usr.usr_id = o.usr_id
这个查询应该在几个方面有所改进:
不更新
usr
中的任何行,其中ordr
中没有匹配的行。这就是除以 0 的地方。 (@Jan 的查询将更新为NULL
。)这里不能被 0 除。
更快,因为它只需要扫描表
ordr
一次。更短、更简洁。
关于postgresql - Postgres 错误 : Division by zero on bulk update SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8776634/