sql - получение суммы одного столбца из нескольких таблиц - PullRequest
0 голосов
/ 02 июля 2018

У меня есть несколько таблиц в моей БД. Давайте назовем их table1, table2, table3. У всех них есть столбец с именем value. Мне нужно создать запрос, который будет возвращать одно число, где это число является суммой всех столбцов value из всех таблиц вместе ... Я пробовал следующий способ:

SELECT (SELECT SUM(value) FROM table1) + (SELECT SUM(value) FROM table2) + (SELECT SUM(value) FROM table3) as total_sum

Но когда по крайней мере один из внутренних SUM равен NULL, все общее значение (total_sum здесь) равно NULL, так что это не очень заслуживает доверия. Когда в определенном внутреннем запросе SUM нет значения, мне нужно, чтобы оно возвращало 0, чтобы оно не влияло на остальную часть SUM.

Чтобы было понятнее, допустим, у меня есть следующие 2 таблицы:

TABLE1:

  ID  |  NAME  |  VALUE
   1    Name1     1000
   2    Name2     2000
   3    Name3     3000

TABLE2:

  ID  |  NAME  |  VALUE
   1    Name1     1500
   2    Name2     2500
   3    Name3     3500

В конце концов, запрос, который мне нужен, вернет одно значение - 13500, которое является общей суммой всех значений в столбце VALUE всех таблиц здесь.

Все остальные столбцы не имеют значения для нужного запроса, и мне даже не важна производительность в этом случае.

Ответы [ 3 ]

0 голосов
/ 02 июля 2018

Вы можете достичь этого, используя Coalesce следующим образом

SELECT 
    (SELECT coalesce(SUM(value),0) FROM table1) + 
    (SELECT coalesce(SUM(value),0) FROM table2) + 
    (SELECT coalesce(SUM(value),0) FROM table3) as total_sum

Другой подход заключается в использовании union all для объединения всех значений в одну таблицу

select distinct coalesce(sum(a.value), 0) as total_sum from
    (select value from table1
      union all
    select value from table 2
      union all
    select value from table 3) a;
0 голосов
/ 02 июля 2018

Вы можете просто сложить их все:

select sum(total) as Total
from (
select sum(value) as total from Table1
union all
select sum(value) as total from Table2
union all
select sum(value) as total from Table3 
) t;
0 голосов
/ 02 июля 2018

Вы можете использовать функцию ISNULL, чтобы заботиться о NULL.

SELECT ISNULL((
                  SELECT SUM(value) FROM table1
              )
            , 0
             ) + ISNULL((
                            SELECT SUM(value) FROM table2
                        )
                      , 0
                       ) + ISNULL((
                                      SELECT SUM(value) FROM table3
                                  )
                                , 0
                                 ) AS total_sum;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...