PostgreSQL - 使用SUM意外除零

nmc*_*mck 7 postgresql postgresql-9.4

此查询(最小可重现的示例):

WITH t as (
    SELECT 3 id, 2 price, 0 amount
)
SELECT 
    CASE WHEN amount > 0 THEN
        SUM(price / amount)
    ELSE
        price
    END u_price
FROM t
GROUP BY id, price, amount
Run Code Online (Sandbox Code Playgroud)

在PostgreSQL 9.4抛出

被零除

没有SUM它的工作原理.

这怎么可能?

cet*_*ver 2

我喜欢这个问题,并向这些硬汉寻求帮助:

策划者有罪:

CASE 无法阻止计算其中包含的聚合表达式,因为聚合表达式是在考虑 SELECT 列表或 HAVING 子句中的其他表达式之前计算的

更多详细信息请参见https://www.postgresql.org/docs/10/static/sql-expressions.html#SYNTAX-EXPRESS-EVAL