我有一個包含三個表(t1,t2,t3)的聯合。 每個重新運行相同數量的記錄,第一列是ID,第二金額:一個簡單的方法來結合來自MySql中的UNION的結果
1 10
2 20
3 20
1 30
2 30
3 10
1 20
2 40
3 50
有沒有在SQL方式簡單概括起來只得到:
1 60
2 80
3 80
我有一個包含三個表(t1,t2,t3)的聯合。 每個重新運行相同數量的記錄,第一列是ID,第二金額:一個簡單的方法來結合來自MySql中的UNION的結果
1 10
2 20
3 20
1 30
2 30
3 10
1 20
2 40
3 50
有沒有在SQL方式簡單概括起來只得到:
1 60
2 80
3 80
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
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`
我分組每個表和工會,因爲我認爲它可能會更快,但你應該嘗試這兩種解決方案。
子查詢:
SELECT id, SUM(amount)
FROM (SELECT * FROM t1
UNION ALL SELECT * FROM t2
UNION ALL SELECT * FROM t3
)
GROUP BY id
不知道如果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
我認爲應該做的伎倆也。
我正在尋找在視圖中完成此操作的方法,但視圖中不允許使用子查詢。有其他選擇嗎? – 2014-06-25 20:53:16
使子查詢成爲另一個視圖 – Jimmy 2014-06-26 03:03:30