2013-02-22 4 views
0

이 질문과 유사합니다 : MySQL Query - Sum one related table - Count another related table 알지만 작동하지 않습니다. 우리가 Attendees의 수, Gifts의 총량을 요약해야하는 각 Event를 들어MySQL - 하나의 테이블에 레코드 수를 계산하고 다른 테이블에 레코드 합계

  • Event
  • Attendee
  • Gifts

:

나는 세 테이블이있다. Attendee은 선물을 받거나 선물을받지 못할 수도 있습니다.

나는 내가 선물 합계를 무시한다면, 나는이 질문에 정답 수 있도록 작업을 얻을 수 있습니다 :

SELECT event.name AS name, count(*) AS num_attendee 
FROM attendee 
RIGHT JOIN event on event.id = attendee.event_id 
WHERE event.company_id =6 
GROUP BY event.id 

을하지만 난 방법 (즉 Gift.Amount 값) 주어진 선물을 요약하면 아무 생각이 없다 각 이벤트에 대해 모두 Attendees 내가 간단하게 Gift 테이블에 합류하려고 할 때, event_id에 기반한 테이블은 모든 수치가 엉뚱한 것입니다.

+0

일부 샘플 입력과 출력이 있습니까? –

+0

atendees와 선물 모두 event_id에 둘 이상의 레코드가 있기 때문에 아마 [cartesian product] (http://en.wikipedia.org/wiki/Cartesian_product)가 나타납니다. 이 경우 [파생 테이블] (http://www.sqlteam.com/article/using-derived-tables-to-calculate-aggregate-values)을 사용하여 하위 테이블에서 집계를 수행 한 후 상위 테이블에 조인하십시오. –

답변

0

이 2000 MS-SQL에 O'K입니다 :

SELECT event.name AS name, count(*) num_attendee ,amount 
FROM attendee 
RIGHT JOIN event on event.id = attendee.event_id 
LEFT OUTER JOIN(
    SELECT event_id,amount=SUM(Amount) 
    FROM Gifts 
    GROUP BY event_id 
) Gifts ON Gifts.event_id=event.id 
WHERE event.company_id =6 
GROUP BY event.name,amount 
+0

큰 일을했습니다 - 고마워요! 이봐, 나는 이걸로 잠시 고생했다. –

0

제대로 참여 하시겠습니까? 당신은 선물 테이블에서 이벤트와 참석자 모두가 있어야합니다

from attendee right join 
    event 
    on event.id = attendee.event_id right join 
    gifts 
    on event.id = gifts.event_id and attendee.id = gifts.attendee_id 
관련 문제