今天遇到了一个sql问题,挺简单的,将一条信息的六个字段相加,没多想就直接写了这个sql语句。
select sum(a.cqzp_fee) + sum(a.parts_fee) + sum(a.self_control_fee) + sum(a.aux_fee)
+ sum(a.manager_fee) + sum(a.work_fee) + sum(a.other_fee)
from em_repair_budget a
where a.is_deleted =0
and a.id = 77
愣是一看没啥问题,但是结果就是null,这些字段有一些还有值,但有一些是null,求和后就是null了,这就很坑。
然后总结了看了一下,若是该列的类型为Decimal,他这直接加就会导致为null,所以这时候就需要给是null的这些付一下值就成了,为null就让他为0,然后相加就不会出错啦。
平常即使数据类型不是这个也建议加上这个为空判断,会减少好多莫名的小问题的。
MySql做法:
IFNULL(字段,0)
Pg做法:
coalesce(字段,0)
目前个人在用的数据库就这两种,所以就这两种改法了。