2010-03-05 5 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

보기에서이를 수행하는 방법을 찾고 있지만 하위 쿼리는보기에서 허용되지 않습니다. 대안이 있습니까? –

+1

하위 쿼리를 다른보기로 변경 – Jimmy

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 *를 사용하면 안됩니다. –

+0

참고 2 : mysql이 서브 쿼리 – zerkms

+0

에 별칭을 할당 할 것을 요청합니다. @David : 물론, 나쁘다. id와 amount가 유일한 두 개의 열 일지는 아마도 문제가되지 않지만 그 가능성은 무엇입니까? @zerkms : 사실입니다. – adharris

0

확실하지 MySQL이 공통 테이블 표현식을 사용하지만 포스트 그레스에서이 작업을 수행 할 경우 :

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 

은 그뿐만 아니라 트릭을한다고 생각합니다.

관련 문제