我收到此错误:错误:除以零。 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)
答案 0 :(得分:2)
你可以尝试:
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
。
更短,更清洁。
答案 1 :(得分:1)
正如错误所述。如果您的ORDR计数(*)为零,则计算将失败。也许添加一个额外的检查确保你的除法的右边永远不会为零。
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
HAVING COUNT(*) > 0)