Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL按两个不同维度分组_Mysql - Fatal编程技术网

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添加了输入数据+预期输出数据。真不敢相信它这么简单-我需要了解更多关于不同修饰符和分组的信息。非常感谢