2010-03-05 70 views

回答

40
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 
+1

我正在尋找在視圖中完成此操作的方法,但視圖中不允許使用子查詢。有其他選擇嗎? – 2014-06-25 20:53:16

+1

使子查詢成爲另一個視圖 – Jimmy 2014-06-26 03:03:30

9
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` 

我分組每個表和工會,因爲我認爲它可能會更快,但你應該嘗試這兩種解決方案。

2

子查詢:

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

注意:在這種情況下,不應該使用select *。 – 2010-03-05 15:25:33

+0

注2:我敢打賭mysql會要求你給子查詢分配別名 – zerkms 2010-03-05 15:27:11

+0

@David:當然,我的不好。如果id和金額是唯一的兩列,可能無所謂,但這有什麼可能呢? @zerkms:也是如此。準確地說是 – adharris 2010-03-05 15:33:14

0

不知道如果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 

我認爲應該做的伎倆也。