如何对两个或多个类似表进行求和

时间:2013-03-20 18:09:38

标签: mysql

有什么方法可以将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上的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

......最后是SUM:

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

有另一种方法可以做到吗?

1 个答案:

答案 0 :(得分:1)

以下是两个选择。

第一个是进行连接,假设它们具有相同的ID:

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更容易处理该情况。