53

我正在尝试使用以下查询总结客户余额:

select sum(balance) from mytable where customer = 'john' 

但是,如果客户没有余额(即mytable表中没有匹配的行),我的查询返回 null 而不是 0。有什么问题?

4

5 回答 5

108

试试这个:

select COALESCE(sum(balance),0) from mytable where customer = 'john' 

这应该做的工作。合并方法应该返回 0。

于 2013-06-11T15:46:45.580 回答
16

这不是问题。如果没有行,sum()将返回nullnull如果所有行都有null余额,它也会返回。

要改为返回零,请尝试:

select isnull(sum(balance),0) from mytable where customer = 'john' 
于 2013-06-11T15:45:33.003 回答
4
select coalesce(sum(coalesce(balance,0)),0) from mytable where customer = 'john' 
于 2013-06-11T15:45:33.170 回答
1

也许您正在考虑COUNT的行为?

COUNT(Field)将返回但0如果没有匹配的行则返回。SUM(Field)NULL

你需要一个ISNULLCOALESCE

COALESCEISNULL

于 2013-06-11T15:48:38.180 回答
0

试试这个:

select sum(IsNull(balance,0)) from mytable where customer = 'john' 
于 2013-06-11T15:45:33.390 回答