mysql - 在一个查询中计算 mysql 中的 group_concat

标签 mysql

我有一对多表关系:

  • 一个用户 多个事件
  • 一个事件用于多个event_attribute

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

以下是您可以使用的数据模式:

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

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

我会得到:

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

没关系。但更进一步,我需要知道每个用户的每个 event_attt 的计数,例如:

1 evet_att1:3;event_att2:2
2 event_att3:1

那就不行了。我可以只使用一个查询来获得超出预期的响应吗?

最佳答案

我们可以尝试先按用户和事件聚合 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;

Demo

关于mysql - 在一个查询中计算 mysql 中的 group_concat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53423174/

相关文章:

mysql - SQL 递归引用完整性

php - 通过 bash 脚本运行 php 脚本时出现 MySQL 数据库连接错误

PHP注册表未输入到数据库

mysql - 使用 MySQL 从数据库中删除重复项

MySQL INSERT SELECT 语句抛出错误 1062 : Duplicate entry '' for key 2

iphone - 一次可以运行多少个 SQL 查询?

php - SQL 检索数据很重要

mysql - MySQL SHOW 命令是否计入 wait_timeout?

php - Codeigniter错误输入数据

php - 如何更新倒数第二行?