Arc*_*ord 5 postgresql evaluation group-by
为什么这个简单的查询会导致“除以零”错误?
select
case when b > 0 then sum(a / b) end
from (values (1,1),(2,1),(1,0),(2,0)) t (a,b)
group by b
Run Code Online (Sandbox Code Playgroud)
我期望输出:
| 案件 |
|---|
| 3 |
| 无效的 |
我唯一的解释是 postgres 在进行分组和评估案例之前计算总和。
请参阅文档:
\n\n\n[\xe2\x80\xa6] a
\nCASE无法阻止对其中包含的聚合表达式求值,因为聚合表达式是在列表中的其他\n表达式之前计算的,SELECT或者HAVING考虑例如,以下查询可能会导致被零除错误,尽管看似已经采取了防范措施:Run Code Online (Sandbox Code Playgroud)\nSELECT CASE WHEN min(employees) > 0\n THEN avg(expenses / employees)\n END\nFROM departments;\n
因此,预计聚合表达式sum(a/b)会在其他表达式之前计算。这不仅适用于Postgresql,也适用于Sql Server。