如何使用mysql查询对group_concat方法中的项目进行计数

时间:2018-11-20 08:18:53

标签: mysql

我有一对多表关系:

  • 一个value2代表多个user
  • 一个event代表多个event

现在,我按event_attribute分组,想知道每个事件属性有多少个?

我正在这样使用userId

group_concat

所以在这里,我首先按group_concat( concat(event_event_attribute.event_attr_id, count( distinct event_event_attribute.value) ) group by event_attr_id) ) group by userId 分组,然后对concat userId分组,至少我希望拥有:

event-attribute

一排。

但这根本不起作用

有什么建议吗?

更具体地说,这是我正在使用的数据库模式:

(attr1, 10),(attr2, 30)....

现在,如果我正在跑步:

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);

我会得到:

select u.id, group_concat(e.name)
from user u 
join event e on u.id=e.user_id 
group by u.id

很好。但是向前迈出了一步,我需要知道每个用户的每个event_attt的计数,例如:

1 event1,event2,event3
2 event4,event6
3 event 6

然后是不可能的。我可以只使用一个查询来获得超出预期的响应吗?

1 个答案:

答案 0 :(得分:0)

应为反别名,以concat的形式增加值,而不是汇总concat

 select concat (group_concat(event_event_attribute.event_attr_id )
          ,' - ',  
         count( distinct event_event_attribute.value) )
 from event_event_attribute
 group by userid

否则,您可能需要一个子查询才能通过event_attr_id获取计数组

select group_concat(
    concat(event_attr_id), ',', count_value)
)
from t (
    select user_id, event_event_attribute.event_attr_id, count( distinct event_event_attribute.value)  count_value
    from event_event_attribute
    group by event_attr_id
) t 
group by user_id