2012-12-01 4 views
6

SQL 쿼리에 문제가 있습니다.
내가 가진 TABLEA :다른 테이블의 합계

productA priceA 
P1  18 
P2  35 
P1  22 
P2  19 

또한 TableB의 :

productB priceB 
P1  3 
P2  15 
P1  80 
P2  96 

2 개 테이블에서 두 제품의 합계를 초래하기 때문에 내가 원하는.

product price 
P1  123 
P2  165 

두 표의 합계를 합산하려고합니다.
이 쿼리를 시도하고 있지만 잘못되었습니다.

SELECT productA, 
    (SELECT SUM(priceA) FROM tableA GROUP BY productA), 
    (SELECT SUM(priceB) FROM tableB GROUP BY productB) 
FROM tableA, tableB 
WHERE productA = productB 
GROUP BY productA 

도와주세요.

select product 
,  sum(price) 
from (
     select productA as product 
     ,  priceA as price 
     from TableA 
     union all 
     select productB 
     ,  priceB 
     from TableB 
     ) as SubQueryAlias 
group by 
     product 
+0

"잘못된 것"으로 무엇을 의미하는지 설명 할 수 있습니까? 쿼리는 무엇을 생산합니까? 2 개의 하위 선택이 각 개별 제품에 대한 올바른 결과를 반환합니까? –

+0

엔진이 무엇입니까? – Sebas

답변

3

당신은 테이블을 병합하는 union을 사용할 수 있으며, group by

select 
    product, 
    sum(price) 
from (
    select productA as product, sum(priceA) as price from tableA group by 1 
    union all 
    select productB, sum(priceB) from tableB group by 1 
) 
group by 1 
+0

그것은 작동합니다! 고맙습니다! :) – vaka

+0

당신이'모두 노조 '를 가지고 있기 때문에 나는 당신에게 상향 투표를하고 있습니다. –

1

이 금액의 합계 말 그대로입니다 : 결과에

+1

이 해결책은'union'이 중복을 제거하기 때문에 올바르지 않습니다. 당신은'모두 노조 '가되어야합니다. –

+0

@GordonLinoff 젠장, 네 말이 맞아! 나는 보통 '노조 모두'를위한 나치입니다. 이것을 지적 해 주셔서 감사합니다. (나는 그 질문을 고쳤다) – Bohemian

0

조인 때문에 자연처럼 보인다 이 문제에 접근하는 방법은 union이 아닌 join의 해결책입니다. 그것은 첫 번째 하위 쿼리의 데이터를 집계 한 후 함께 결과를 조인 : 나는이 full outer join 경우 테이블이 제품의 다른 세트가 사용하고

select coalesce(a.productA, b.productB) as product, 
     coalesce(a.PriceA, 0) + coalesce(b.PriceB, 0) as price 
from (select productA, sum(PriceA) as PriceA 
     from TableA 
     group by productA 
    ) a full outer join 
    (select productB, sum(PriceB) as PriceB 
     from TableB 
     group by productB 
    ) b 
    on a.productA = b.prodctB 

. 결과적으로 을 select 문에 입력해야합니다.

관련 문제