[英]count in group_concat in mysql in one query
I have one to many table relationship :我有一对多的表关系:
user
for multiple event
一个user
参加多个event
event
for multiple event_attribute
多个event_attribute
一个event
Now, I group by userId
and want to know how many for each event attribute ?现在,我按userId
分组并想知道每个事件属性有多少?
Below is the data schema you can use:以下是您可以使用的数据架构:
To be more specific, this is the DB schema I am using:更具体地说,这是我正在使用的数据库架构:
CREATE TABLE `user` (
`id` int(11) NOT NULL,
`name` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`)
);
CREATE TABLE `event` (
`id` int(11) NOT NULL,
`name` varchar(45) DEFAULT NULL,
`user_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `event_attr` (
`id` int(11) NOT NULL,
`att_name` varchar(45) DEFAULT NULL,
`event_id` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `user` VALUES (1,'user1'),(2,'user2'),(3,'user3');
INSERT INTO `event` VALUES (1,'event1',1),(2,'event2',1),(3,'event3',1),(4,'event4',2),(5,'event5',2),(6,'event6',3);
INSERT INTO `event_attr` VALUES (1,'att1','1'),(2,'att2','1'),(3,'att3','1'),(4,'att1','2'),(5,'att2',NULL);
Now if I am running:现在,如果我正在运行:
select u.id, group_concat(e.name)
from user u
join event e on u.id=e.user_id
group by u.id
I will get:我会得到:
1 event1,event2,event3
2 event4,event6
3 event 6
That is fine.那没关系。 But one step forward, I need to know count for each event_attt for each user, such as:但是向前迈出一步,我需要知道每个用户的每个 event_attt 的计数,例如:
1 evet_att1:3;event_att2:2
2 event_att3:1
Then it is not possible.那么就不可能了。 Can I use just one query to get above expected response?我可以只使用一个查询来获得高于预期的响应吗?
We can try aggregating the event
table first by both user and event, to generate the counts:我们可以尝试首先通过用户和事件聚合event
表,以生成计数:
SELECT u.id, GROUP_CONCAT(e.name, ':', CAST(e.cnt AS CHAR(50)))
FROM user u
LEFT JOIN
(
SELECT id, name, user_id, COUNT(*) AS cnt
FROM event
GROUP BY id, name, user_id
) e
ON u.id = e.user_id
GROUP BY
u.id;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.