un modo semplice per sommare un risultato di UNION in MySql




sql union join (4)

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`

Ho raggruppato ogni tavolo e unito perché penso che potrebbe essere più veloce, ma dovresti provare entrambe le soluzioni.

Ho un'unione di tre tabelle (t1, t2, t3). Ogni volta rieseguire esattamente lo stesso numero di record, la prima colonna è id, la seconda quantità:

1  10
2  20
3  20

1  30
2  30
3  10

1  20
2  40
3  50

C'è un semplice in sql modo di riassumere per ottenere solo:

1   60
2   80
3   80

Answer #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

Answer #2

subquery:

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

Answer #3

Non sono sicuro che MySQL usi l'espressione di tabella comune, ma lo farei con 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

Penso che dovrebbe fare anche il trucco.





union