2013-02-22 5 views
0

Я знаю, что это похоже на этот вопрос: MySQL Query - Sum one related table - Count another related table, но я не могу заставить это работать для меня.MySQL - подсчет записей в одной таблице и записей суммы в другой таблице

У меня есть 3 таблицы:

  • Event
  • Attendee
  • Gifts

Для каждого Event мы должны суммировать количество Attendees и общее количество 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

Возможно, вы получаете [декартовый продукт] (http://en.wikipedia.org/wiki/Cartesian_product), потому что atendees и подарки имеют более одной записи за event_id. Если это так, используйте [производную таблицу] (http://www.sqlteam.com/article/using-derived-tables-to-calculate-aggregate-values) для выполнения агрегации по дочерним таблицам, прежде чем вы выполните присоединиться к родительской таблице. –

ответ

0

Это O'K в MS-SQL 2000:

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

Правильно ли вы делаете соединение? Вы должны иметь как событие и Attendee в таблице подарков:

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 
Смежные вопросы