在没有程序代码的情况下处理 PostgresQL 中的除法错误 - 这可能吗?

Dealing with division errors in PostgresQL without procedural code - is it possible?

我必须生成(在 PostgresQL 中,如果这很重要的话)一个 table 包含一个包含两个和的商的列,基本上像这样(非常简化):

select name, sum(a)/sum(b), sum(c)/sum(d)
from a_complex_nested_select_query_with_many_zeros
group by name
order by name;

table 有数万行(不是太大),但在少数情况下,对 b 或 d 求和确实会产生 0,这会导致整个查询失败 Divide by 0.

在研究如何处理异常时,我只能找到PL/pgSQL Control Structures的资料,这似乎需要创建一个函数(但我不确定)。

我的问题当然是如何使这个查询工作。也许答案与

有关

编辑 "repeating sum calls" 我的意思是我知道我 可以 写:

select name, 
    case when sum(b)=0 then null else sum(a)/sum(b) end,
    case when sum(d)=0 then null else sum(c)/sum(d) end

等等,但我不确定这是否是一件好事。 (我想有人会回答为什么不分析它,但我认为在某处可能有更好的方法。)

如果参数相等,

nullif 将 return 为 null。除以 null 结果为 null

select
    name,
    sum(a) / nullif(sum(b), 0),
    sum(c) / nullif(sum(d), 0)
from a_complex_nested_select_query_with_many_zeros
group by name
order by name;