web-dev-qa-db-ja.com

MySqlでUNIONからの結果を合計する簡単な方法

3つのテーブル(t1、t2、t3)の結合があります。それぞれがまったく同じ数のレコードを再実行します。最初の列はid、2番目の量は次のとおりです。

1  10
2  20
3  20

1  30
2  30
3  10

1  20
2  40
3  50

simpleをSQLの方法で要約して、取得するだけです:

1   60
2   80
3   80
25
select id, sum(amount) from (
    select id,amount from table_1 union all
    select id,amount from table_2 union all
    select id,amount from table_3
) x group by id
51
Jimmy
SELECT id, SUM(amount) FROM
(
    SELECT id, SUM(amount) AS `amount` FROM t1 GROUP BY id
  UNION ALL
    SELECT id, SUM(amount) AS `amount` FROM t2 GROUP BY id
) `x`
GROUP BY `id`

私はそれがより速いかもしれないと思うので、私は各テーブルをグループ化し、結合しましたが、両方のソリューションを試してみるべきです。

12
zerkms

サブクエリ:

SELECT id, SUM(amount)
FROM ( SELECT * FROM t1
       UNION ALL SELECT * FROM t2
       UNION ALL SELECT * FROM t3
     )
GROUP BY id
3
adharris

MySQLが共通テーブル式を使用しているかどうかはわかりませんが、postgresでこれを行います。

WITH total AS(
              SELECT id,amount AS amount FROM table_1 UNION ALL
              SELECT id,amount AS amount FROM table_2 UNION ALL
              SELECT id,amount AS amount FROM table_3
             )
SELECT id, sum(amount)
  FROM total

私もそれでうまくいくと思う。

1
just_myles