Подтвердить что ты не робот

Простой способ суммировать результат от UNION в MySql

У меня есть объединение трех таблиц (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
4b9b3361

Ответ 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

Ответ 2

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`

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

Ответ 3

подзапросов:

SELECT id, SUM(amount)
FROM ( SELECT * FROM t1
       UNION ALL SELECT * FROM t2
       UNION ALL SELECT * FROM t3
     )
GROUP BY id

Ответ 4

Не уверен, что 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

Я думаю, что это тоже должно было сделать.