Ответ 1
select id, sum(amount) from (
select id,amount from table_1 union all
select id,amount from table_2 union all
select id,amount from table_3
) x group by id
У меня есть объединение трех таблиц (t1, t2, t3). Каждый повтор точно такого же количества записей, первый столбец - id, вторая сумма:
1 10
2 20
3 20
1 30
2 30
3 10
1 20
2 40
3 50
Есть ли простой в sql-способе, чтобы суммировать его, чтобы получить только:
1 60
2 80
3 80
select id, sum(amount) from (
select id,amount from table_1 union all
select id,amount from table_2 union all
select id,amount from table_3
) x group by id
SELECT id, SUM(amount) FROM
(
SELECT id, SUM(amount) AS `amount` FROM t1 GROUP BY id
UNION ALL
SELECT id, SUM(amount) AS `amount` FROM t2 GROUP BY id
) `x`
GROUP BY `id`
Я сгруппировал каждую таблицу и объединил, потому что я думаю, что это может быть быстрее, но вы должны попробовать оба решения.
подзапросов:
SELECT id, SUM(amount)
FROM ( SELECT * FROM t1
UNION ALL SELECT * FROM t2
UNION ALL SELECT * FROM t3
)
GROUP BY id
Не уверен, что MySQL использует общее выражение таблицы, но я бы сделал это в postgres:
WITH total AS(
SELECT id,amount AS amount FROM table_1 UNION ALL
SELECT id,amount AS amount FROM table_2 UNION ALL
SELECT id,amount AS amount FROM table_3
)
SELECT id, sum(amount)
FROM total
Я думаю, что это тоже должно было сделать.