Создать запрос (сумма из разных таблиц)

У меня есть 3 таблицы, и я хочу суммировать значение:

Table 1  
id............value  
31001.........200  
31002.........100  
31003.........1  
31004.........0  
31005.........0  


Table 2  
id...........value  
31001.........1  
31002.........1  
31004.........5  

Table 3  
id...........value  
31001.........2  
31003.........2  
31005.........1

Я попытался использовать следующий код:

SELECT table1.id, Sum([table1].[Value]+[table2].[Value]+[table3].[Value])
FROM (table1 LEFT JOIN table2 ON table1.[id] = table2.[id]) LEFT JOIN table3 ON table1.[id] = table3.[id]
WHERE (((table2.id) Is not Null) and (table3.id) and (table2.id))
GROUP BY table1.id;

UNION

SELECT table1.id,Sum([table1].[Value]+[table2].[Value])
FROM table1 LEFT JOIN table2 ON table1.[id] = table2.[id]
WHERE (((table2.id) Is not Null))
GROUP BY table1.id;

UNION

SELECT table1.id,Sum([table1].[Value]+[table3].[Value])
FROM table1 LEFT JOIN table3 ON table1.[id] = table3.[id]
WHERE (((table3.id) Is not Null))
GROUP BY table1.id;

Я хочу результат, как:

id.........value  
31001.......223  
31002.......111  
31003.........3  
31004.........5  
31005.........1

Но я получаю

id..........value  
31001.......221  
31001.......222  
31001.......223  
31002.......111  
31003.........3  
31004.........5  
31005.........1

Как я могу это исправить?

Сделайте UNION ALL вместо UNION. ГРУППА ОБЪЕДИНЕНИЕМ ВСЕХ РЕЗУЛЬТАТОВ.

jarlh 27.05.2019 16:25

Почему 31001.......223? Сумма 200 + 1 + 2 = 203.

forpas 27.05.2019 16:51

@forpas упс, опечатка. 200 должно быть 220.

Olfmor 27.05.2019 17:27

Это имеет смысл. Вы пробовали мой ответ?

forpas 27.05.2019 17:28
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
4
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сначала используйте UNION ALL для всех 3 таблиц, а затем просуммируйте столбец value на id:

select id, sum(value) as totalvalue from (
  select id, value from table1
  union all
  select id, value from table2
  union all
  select id, value from table3
)
group by id
order by id

Результат будет:

id  totalvalue
31001   203
31002   101
31003   3
31004   5
31005   1

Другие вопросы по теме