如何用两个不同的表求和两列

时间:2019-06-13 22:39:54

标签: mysql sql

嗨,我想用两个不同的表求和两列(类型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);

1 个答案:

答案 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可以在日期列上使用索引。