MySQL

2010-03-05 5 views
19

'daki UNION sonucunu özetlemenin basit bir yolu Üç tablo (t1, t2, t3) birliğim var. Kayıtların Her tekrar yayınlama aynı sayıda ilk sütun kimliği, ikinci miktarıdır: MySQL

1 10 
2 20 
3 20 

1 30 
2 30 
3 10 

1 20 
2 40 
3 50 

bunu özetlemek için sql şekilde bir basit var sadece almak:

1 60 
2 80 
3 80 

cevap

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

Bunu bir görünümde gerçekleştirmenin bir yolunu arıyorum, ancak alt sorgulara görünümlerde izin verilmiyor. Alternatif var mı? –

+1

Alt sorguyu başka bir görünümde gösterme – 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` 

Her tabloyu gruplandırdım ve daha hızlı olabileceğini düşündüğüm için birleştirdim, ancak her iki çözümü de denemelisiniz.

2

Alt sorgusu:

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

Not: Bu durumda select seçeneğini kullanmamalısınız. –

+0

Not 2: Eminim mysql size – zerkms

+0

@David alt sorgusuna takma ad atamanızı isteyecektir: Elbette, kötüyüm. Muhtemelen id ve miktarın sadece iki sütun olup olmaması önemli değil, ama bunun şansı nedir? @zerkms: Ayrıca doğru. Tam olarak – adharris

0

emin değil MySQL ortak tablo ifade kullanan ama postgres bunu olsaydı:

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 

Bunun yanı hile yapmak gerektiğini düşünüyorum.