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

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

4

1 回答 1

1

这里有两个选择。

首先是进行连接,假设它们具有相同的 id:

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

当然,您可以将其更改为 a 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-20T19:42:33.990 回答