postgresql - Postgres 错误 : Division by zero on bulk update SQL

标签 postgresql bulkinsert

我收到此错误:错误:除以零。 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/

相关文章:

database - 了解 Heroku 中的多个数据库

postgresql - 带有 current_date 的 postgres 查询不起作用

sql - 具有 DEFAULT 值的多行条件插入

php - 批量参数化插入

php - LAST_INSERT_ID() 未返回所有标签

sql - 尝试查找不同的数据时返回相同的结果

database - 使用 ORM 模型而不是正确的数据库建模

c# - 批量插入未保存到数据库

sql - 在 Postgres 中翻译 DECODE

database - PostgreSQL - SQL 状态 : 42601 syntax error