嗨,我想用两个不同的表求和两列(类型double)。我的查询sql起作用,直到我添加子句“ where”。如果每个子句“ where”都满足,则为okej,返回正确的结果。如果甚至有一个子句返回null,则结果为null。如果不存在记录,将我的代码更改为单子句的内容将返回0。
select (select sum(amount) from change_graphic where month(change_date)=4 and year(change_date)=2019)+(select SUM(provision) from contracts where accepted=0 and month(date)=4 and year(date)=2019);
答案 0 :(得分:1)
使用coalesce()
:
select (select coalesce(sum(amount), 0)
from change_graphic
where month(change_date) = 4 and year(change_date) = 2019) +
(select coalesce(sum(provision), 0)
from contracts
where accepted = 0 and month(date) = 4 and year(date) = 2019
);
保证子查询返回一行,因为它们是没有GROUP BY
的聚合查询。因此,您可以将NULL
生成的SUM()
转换为0
进行添加。
我建议您采用以下方式进行日期比较:
select (select coalesce(sum(amount), 0)
from change_graphic
where change_date >= '2019-04-01' and
change_date < '2019-05-01'
) +
(select coalesce(sum(provision), 0)
from contracts
where accepted = 0 and
date >= '2019-04-01' and
date < '2019-05-01'
);
如果合适的索引可用,这使MySQL可以在日期列上使用索引。