2010-03-05 7 views

Respuesta

40
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 
+1

Estoy buscando una forma de lograr esto en una vista, pero las subconsultas no están permitidas en las vistas. ¿Hay una alternativa? –

+1

haga que la subconsulta sea otra vista – Jimmy

9
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 tabla y me uní porque creo que podría ser más rápido, pero debería probar ambas soluciones.

2

subconsulta:

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

Nota: no debe usar seleccionar * en este caso. –

+0

Nota 2: Apuesto a que mysql le pedirá que asigne un alias a la subconsulta – zerkms

+0

@David: Claro, mi culpa. Probablemente no importe si id y amount son las únicas dos columnas, pero ¿cuáles son las posibilidades de eso? @zerkms: También es cierto. – adharris

0

No estoy seguro si MySQL usa expresión de tabla común pero me gustaría hacer 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 debe hacer el truco también.

Cuestiones relacionadas