MySQL按两个不同维度分组
如果我有一张桌子MySQL按两个不同维度分组,mysql,Mysql,如果我有一张桌子 `account`, `account_contact`, `contact_event` and `event` 并且存在以下FK `account_contact`: `account_id`,`contact_id` `contact_event`: `contact_id`, `event_id` 如何查询与该账户和活动相关的所有联系人的“总票证”账户的出席频率,以及该账户联系人参加的活动的不同数量 我有以下内容,但是连接会导致第一个子查询返回具有相同值的重复票证售
`account`, `account_contact`, `contact_event` and `event`
并且存在以下FK
`account_contact`: `account_id`,`contact_id`
`contact_event`: `contact_id`, `event_id`
如何查询与该账户和活动相关的所有联系人的“总票证”账户的出席频率,以及该账户联系人参加的活动的不同数量
我有以下内容,但是连接会导致第一个子查询返回具有相同值的重复票证售出行
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
相反,我应该返回:
AccountID Tickets DistinctEvents
38110518 15 8
AccountID Tickets DistinctEvents
100 3 2
编辑:示例数据
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
38110518 15 8
AccountID Tickets DistinctEvents
100 3 2
试试这个:
select
a.account_id,
count(event_id) tickets,
count(distinct event_id) distinct_events
from account_contact a
inner join contact_event e
on a.contact_id = e.contact_id
group by a.account_id;
请在问题中发布示例输入数据和基于此的预期输出。只需将第二行更改为a.id分组,而不是ac.id分组。看看我的答案。几分钟后我会发布一些数据。只是做一些弥补。不知道为什么投票被否决。@gurV添加了输入数据+预期输出数据。真不敢相信它这么简单-我需要了解更多关于不同修饰符和分组的信息。非常感谢