una - unir dos consultas sql misma tabla
una forma sencilla de sumar un resultado de UNION en MySql (4)
Tengo una unión de tres tablas (t1, t2, t3). Cada ejecución se vuelve a ejecutar exactamente el mismo número de registros, la primera columna es id, la segunda cantidad:
1 10
2 20
3 20
1 30
2 30
3 10
1 20
2 40
3 50
¿Hay una manera simple en sql de resumirlo para solo obtener:
1 60
2 80
3 80
No estoy seguro si MySQL usa una expresión de tabla común pero haría esto en 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
Creo que eso debería hacer el truco también.
Subconsulta:
SELECT id, SUM(amount)
FROM ( SELECT * FROM t1
UNION ALL SELECT * FROM t2
UNION ALL SELECT * FROM t3
)
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`
Agrupé cada mesa y me uní porque creo que podría ser más rápido, pero deberías probar ambas soluciones.
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