0

MySQL で 2 つの類似したテーブルの値を合計する方法はありますか?

たとえば、次の 2 つのテーブルがあります。

表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を使用することを考えています。テーブルには同じフィールドがあり、その後にすべてのフィールドでSUMが続き、IDによってグループ化されるためです。

最初のクエリでは、次のようになります。

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

それを行う別の方法はありますか?

4

1 に答える 1

1

ここに 2 つの選択肢があります。

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 値を処理する必要があります。

2番目はあなたの方法です:

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

どちらを行うかは、やや好みの問題です。join私は、 (特に適切なインデックスを使用すると) 最適化が向上すると考える傾向があります。ただし、2 つのテーブルで ID のセットが異なる場合は、union allそのケースをより簡単に処理できます。

于 2013-03-20T19:42:33.990 に答える