Если у меня есть таблицыMySQL Группировка два различных размерами
`account`, `account_contact`, `contact_event` and `event`
И следующий FK-х существует
`account_contact`: `account_id`,`contact_id`
`contact_event`: `contact_id`, `event_id`
Как запросить частоту посещаемости для счетов «общих билетов» всех контакты, связанные с учетной записью и событием, и отчетливое количество событий, на которых присутствовали контакты учетной записи.
У меня есть следующее, однако JOIN заставляет первый подзапрос возвращать повторяющиеся строки Ticket's Sold
с одинаковыми значениями.
SELECT a1.id,`Tickets Sold`, a2.`Distinct Events Attended` FROM
(SELECT a.id, count(*) `Tickets Sold`
FROM account a JOIN account_contact ac
ON ac.active = 1 AND a.id=ac.account_id
JOIN contact_event ce
ON ac.contact_id=ce.contact_id
JOIN event e
ON ce.event_id=e.id AND ce.role = 'Checked In'
WHERE e.date_start >= '2015-12-31' AND e.date_end < '2017-01-01'
GROUP BY a.id) a1
LEFT JOIN
(SELECT a.id,count(*) `Distinct Events Attended`
FROM account a
JOIN account_contact ac
ON a.id=ac.account_id AND ac.active = 1
JOIN contact_event ce
ON ac.contact_id=ce.contact_id AND ce.role = 'Checked In'
JOIN event e
ON ce.event_id=e.id
WHERE e.date_start >= '2015-12-31' AND e.date_end < '2017-01-01'
GROUP BY ac.id) a2
ON a1.id=a2.id
Результат показывает проблему: Как вы можете видеть отдельные события, возвращается количество билетов, проданных компанией для этого конкретного случая, поэтому в данном примере было 8 событий присутствовали,
AccountId Tickets DistinctEvents
38110518 15 5
38110518 15 1
38110518 15 3
38110518 15 2
38110518 15 1
38110518 15 1
38110518 15 1
38110518 15 1
Вместо этого я должен вернуться:
AccountID Tickets DistinctEvents
38110518 15 8
EDIT: Пример данных
SELECT id,name FROM account;
id name
100 Big Company
SELECT id,first_name FROM contact;
id first_name
200 John
800 Other
SELECT contact_id,event_id FROM contact_event;
contact_id event_id
200 300
200 500
800 300
SELECT account_id,contact_id FROM account_contact;
account_id contact_id
100 200
100 800
SELECT id,name FROM event;
id name
300 Big Event
500 Small Event
Если вернуться:
AccountID Tickets DistinctEvents
100 3 2
Пожалуйста, пост выборки входных данных и ожидаемых результатов на его основе в вопросе – GurV
Просто измените второй на последней строке в группе a.id вместо ac.id. См. Мой ответ. – AgapwIesu
Я отправлю некоторые данные за несколько минут. Просто задумался. – Alasdair