2014-11-13 9 views
0

두 테이블 tableA와 tableB가 있습니다.DISTINCT SUM with MysQL JOIN

tableA 
------- 
ID sid  amount 

1 swerdd 20  
2 swerdd 30  
3 fdff 40 

tableB 
------ 

new_id token date 

10  swerdd 2014 -10-12  
11  swerdd 2014 -10-13  
12  swerdd 2014 -10-13 

는 지금은

SELECT * FROM tableA JOIN tableB on tableA.sid = tableB.token 

이 여러 행을주고 그래서 내 다른 쿼리

SELECT SUM(amount) FROM tableA JOIN tableB on tableA.sid = tableB.token 

잘못된 결과를주고있는 쿼리를 사용할 때. DISTINCT SUM은 어떻게 선택합니까?

EDIT : 문제는 내가 sid와 토큰이 반복 될 때 여기에 관계가 많다는 것입니다. 그래서 간단히 말해서, 많은 참여에서 뚜렷한 합계를 계산할 수있는 방법은 무엇입니까?

+1

예상되는 결과는 무엇입니까? –

+0

SUM을 90으로 가져와야합니다. 그러나 조인을 사용할 때 다른 점이 있습니다. –

+0

테이블에 reward_amount 필드가 있다고 생각하지 않습니다. – Edrich

답변

-1

레코드 세트에서 일치를 수행하려면 GROUP BY 절이 필요합니다. .

당신이 데이터 그룹에 대해 SQL 지식을 심화에 관심이 있다면
SELECT SUM(amount) 
FROM tableA 
WHERE sid IN (SELECT token FROM tableB) 
GROUP BY sid 

, 당신은 볼 수 ... http://www.techonthenet.com/sql/group_by.php

+0

그러나 이것은 sid와 토큰이 두 테이블에서 반복 될 때 올바른 결과를주지 않을 것입니다. –

+0

여러분이 제공 한 것에서부터'tableA' 만 필요합니다 –

+0

예. 것은 내가 tableB에서 특정 필터를 적용해야하므로 내가 그것에 합류하고있다. 그렇지 않으면 간단하게 선택할 수 있습니다. –

1

A가 작업에 참여 포함하지 않는 방법의 몇

EXISTS 조건 ...

SELECT SUM(a.reward_amount) 
    FROM tableA a 
WHERE EXISTS (SELECT 1 FROM tableB b WHERE b.token = a.sid) 

IN (subquery) 술어 ...

조인 동작을 위해
SELECT SUM(a.reward_amount) 
    FROM tableA a 
WHERE a.sid IN (SELECT b.token FROM tableB b) 

은 하나의 옵션은

SELECT SUM(a.reward_amount) 
    FROM tableA a 
    JOIN (SELECT b.token 
      FROM tableB b 
      GROUP BY b.token 
     ) c 
    ON c.token = a.sid 
0

당신이 쿼리 아래에 사용할 수있는 별개의 합계를 얻으려면 ... 토큰의 고유 한 목록을 가져 인라인 뷰를 사용하는 것입니다

SELECT reward_amount 
FROM tableA 
    JOIN tableB on tableA.sid = tableB.token 
GROUP BY reward_amount;