如何总结两个或更多类似的表
问题描述:
有什么办法可以总结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
有一种替代的方法呢?
答
这里有两种选择。
首先是做一个连接,假设它们具有相同的标识:
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
更容易处理这种情况。
不,没有什么可以做你的方式是好的。 – 2013-03-20 18:11:09
如果你有两张类似的表,那么你为什么不把它们合并到一张表中呢? – 2013-03-20 18:19:10
因为它们有不同的目的。第一个表格按月包含特定库存项目的消耗预测,而第二个表格包含按月采购订单中接收的数量。 – gmsantos 2013-03-20 18:30:54