2010-03-05 14 views

Odpowiedz

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

Szukam sposobu na osiągnięcie tego w widoku, ale zapytania podrzędne nie są dozwolone w widokach. Czy istnieje alternatywa? –

+1

wykonaj podkwerendę inny widok – 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` 

Zgrupowałem każdą tabelę i połączono ją, ponieważ myślę, że może być szybsza, ale powinieneś wypróbować oba rozwiązania.

2

Podkwerenda:

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

Uwaga: nie należy używać select * w tym przypadku. –

+0

Uwaga 2: Założę się, że mysql poprosi cię o przypisanie aliasu do podzapytania – zerkms

+0

@David: Na pewno, moje złe. Prawdopodobnie nie ma znaczenia, czy id i kwota są jedynymi kolumnami, ale jakie są tego szanse? @zerkms: Również prawdziwe. – adharris

0

Nie wiem, czy MySQL używa wyrażenia wspólnym stole, ale chciałbym to zrobić w PostgreSQL:

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 

myślę, że powinno wystarczyć, jak również.

Powiązane problemy