Как сложить два столбца с двумя различными таблицами - PullRequest
0 голосов
/ 14 июня 2019

Привет, я хочу сложить два столбца (типа double) с двумя различными таблицами.Мой запрос SQL работает, пока я не добавлю пункты "где".Если все пункты "где" встречаются, то есть okej, верните правильный результат.Если хотя бы одно предложение возвращает ноль, то результат равен нулю.Что поменять мой код на одиночное предложение и вернуть 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 Ответ

1 голос
/ 14 июня 2019

Использовать 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 для использования индекса в столбце даты, если соответствующий индекс доступен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...