簡體   English   中英

在一個查詢中計算 mysql 中的 group_concat

[英]count in group_concat in mysql in one query

我有一對多的表關系:

  • 一個user參加多個event
  • 多個event_attribute一個event

現在,我按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;

演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM