我有查询哪个正常运行,并执行两种类型的工作,COUNT
和SUM
。
像
这样的东西select
id,
Count (contracts) as countcontracts,
count(something1),
count(something1),
count(something1),
sum(cost) as sumCost
from
table
group by
id
我的问题是:如果某个ID没有合约,则COUNT
会返回0,Null
会返回SUM
。我想看到null而不是0
我在考虑Count (contracts) = 0 then null else Count (contracts) end
时的情况,但我不想这样做,因为我在查询中有超过12个计数位置,并且它预先记录了大量记录,所以我认为它可能会变慢降低查询性能。
有没有其他方法可以用NULL
替换0?
答案 0 :(得分:4)
以下是三种方法:
1. (case when count(contracts) > 0 then count(contracts) end) as countcontracts
2. sum(case when contracts is not null then 1 end) as countcontracts
3. nullif(count(contracts), 0)
所有这三个都需要编写更复杂的表达式。但是,这真的不难。只需多次复制该行,并在每个行上更改变量的名称。或者,获取当前查询,将其放入电子表格并使用电子表格函数进行转换。然后复制该功能。 (电子表格对于重复的代码行来说是非常好的代码生成器。)
答案 1 :(得分:4)
试试这个:
`select NULLIF ( Count(something) , 0)