2010-03-05 11 views

Antwort

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

Ich suche nach einer Möglichkeit, dies in einer Ansicht zu erreichen, aber Unterabfragen sind in Ansichten nicht zulässig. Gibt es eine Alternative? –

+1

machen Sie die Unterabfrage eine andere Ansicht – 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` 

Ich gruppierte jeden Tisch und unioned, weil ich denke, es könnte schneller sein, aber Sie sollten beide Lösungen versuchen.

2

Subquery:

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

Hinweis: Sie sollten nicht wählen Sie * in diesem Fall. –

+0

Hinweis 2: Ich wette, mysql wird Sie bitten, Alias ​​zu Unterabfrage – zerkms

+0

@David zuzuweisen: Sicher, mein schlechtes. Wahrscheinlich ist es egal, ob id und Menge die einzigen zwei Spalten sind, aber welche Chancen haben Sie? @zerkms: Auch wahr. – adharris

0

Nicht sicher, ob MySQL verwendet allgemeiner Tabellenausdruck, aber ich würde dies in Postgres tun:

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 

denke ich, dass sollte auch den Trick.

Verwandte Themen