此查询(最小可重复示例):
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
在PostgreSQL 9.4上抛出
除以零
在没有SUM
的情况下有效。
这怎么可能?
答案 0 :(得分:2)
我喜欢这个问题,并向以下tough guys寻求帮助:
计划者有罪:
CASE无法阻止对包含的聚合表达式的求值 在其中,因为聚合表达式先于其他表达式进行计算 会考虑SELECT列表或HAVING子句中的表达式
更多详情,请访问https://www.postgresql.org/docs/10/static/sql-expressions.html#SYNTAX-EXPRESS-EVAL
答案 1 :(得分:0)
我无法弄清楚“为什么”部分,但这是一种解决方法...
WITH t as (
SELECT 3 id, 2 price, 0 amount
)
SELECT SUM(price / case when amount = 0 then 1 else amount end) u_cena
FROM t
GROUP BY id, price, amount
OR:您可以使用以下内容来避免出现“情况”
SELECT SUM(price / power(amount,sign(amount))) u_cena
FROM t
GROUP BY id, price, amount