2013-03-20 129 views
0

有什麼辦法可以總結MySQL中兩個相似的表的值?如何總結兩個或更多類似的表

例如,我有以下兩個表:

表1:

id | field1 | field2 | ... | fieldN 
1 | 5 | 6 | ... | 32 
2 | 25 | 5 | ... | 2 
...| ... | ... | ... | ... 
N | 4 | 1 | ... | 30 

表2:

id | field1 | field2 | ... | fieldN 
1 | 4 | 5 | ... | 4 
2 | 2 | 5 | ... | 3 
...| ... | ... | ... | ... 
N | 4 | 5 | ... | 0 

我想使用UNION ALL上表,因爲這些表具有相同的字段,接着在每個字段GROUP BY ID上加上一個SUM。

在第一個查詢我會得到:

id | field1 | field2 | ... | fieldN 
1 | 5 | 6 | ... | 32 
1 | 4 | 5 | ... | 4 
2 | 25 | 5 | ... | 2 
2 | 2 | 5 | ... | 3 
...| ... | ... | ... | ... 
N | 4 | 1 | ... | 30 
N | 4 | 5 | ... | 0 

...,最後的總和:

id | field1 | field2 | ... | fieldN 
1 | 9 | 11 | ... | 38 
2 | 27 | 10 | ... | 5 
...| ... | ... | ... | ... 
N | 8 | 6 | ... | 30 

有一種替代的方法呢?

+0

不,沒有什麼可以做你的方式是好的。 – 2013-03-20 18:11:09

+0

如果你有兩張類似的表,那麼你爲什麼不把它們合併到一張表中呢? – 2013-03-20 18:19:10

+0

因爲它們有不同的目的。第一個表格按月包含特定庫存項目的消耗預測,而第二個表格包含按月採購訂單中接收的數量。 – gmsantos 2013-03-20 18:30:54

回答

1

這裏有兩種選擇。

首先是做一個連接,假設它們具有相同的標識:

select t1.id, (t1.field1 + t2.field1) as Field1, . . . 
from t1 join 
    t2 
    on t1.id = t2.id 

你可以,當然,這種改變爲left outer join,但你必須在算術運算處理NULL值。

第二個是你的方法:

select id, sum(field1) as Field1, . . . 
from ((select t1.* 
     from t1 
    ) union all 
     (select t2.* 
     from t2 
    ) 
    ) t 
group by id 

你做的是有點偏好的問題。我傾向於認爲join會更好地優化(特別是對於正確的索引)。但是,如果兩個表中的ID組不同,union all更容易處理這種情況。