我必须生成(在PostgresQL中,如果重要的话)一个包含两个和的商的列的表,基本上就像这样(非常简化):
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;
该表有数万行(不是太大),但在少数情况下,通过b或d求和会产生0,这会导致整个查询失败并显示Divide by 0
。
在研究如何处理异常时,我只能找到PL/pgSQL Control Structures的信息,这似乎需要创建一个函数(但我不确定)。
我的问题当然是如何使这个查询工作。也许答案与
有关编辑通过"重复和来电"我的意思是我知道我可以写:
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
等等,但我不确定这是不是一件好事。 (我想有人会回答为什么 - 不要 - 你的个人资料 - 但我认为可能有更好的方法,在某处。)
答案 0 :(得分:1)
nullif
将返回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;