2012-03-29 2 views
7

У меня есть 2 таблицы, пользователи и следует. В таблице ниже указан столбец с именем status. Я хотел бы подсчитать, сколько из них следует каждому пользователю, группируя по статусу.mysql group_concat со счетом внутри?

Нижеприведенный запрос возвращает запись для каждого типа статуса для каждого пользователя.

SELECT users.name as user_name, f.status, count(f.id) 
FROM users 
JOIN application_follows f ON f.user_id = users.id 
GROUP BY users.id, f.status 
ORDER BY users.id 

возвращает что-то вроде:

user_name  status  count 

mike   new   10 
mike   old   5 
tom   new   8 
tom   old   9 

, но я хотел бы что-то более дружественным, как:

user_name  status_count 

mike   new,10|old,5 
tom   new,8|old,9 

попытался с помощью GROUP_CONCAT и сосчитать, но не работал. Любые подсказки?

ответ

13

Вы должны использовать GROUP BY дважды, первый на (user_id, статус) из следующего, чтобы получить отсчеты затем на user_id из присоединяемой таблицы в CONCAT:

SELECT users.name, GROUP_CONCAT(CONCAT(f.status, ',', f.cnt) SEPARATOR '|') 
FROM users 
JOIN 
(SELECT user_id, status, count(id) AS cnt 
    FROM application_follows 
    GROUP BY user_id, status) f 
ON f.user_id = users.id 
GROUP BY users.id 
+0

эй человек спасибо, что сделал трюк ... –

0

Я не знаю, полные определения таблиц, так что я созданный запрос, который использует только имя_пользователя, статус и счет.

SELECT user_name, GROUP_CONCAT(CONCAT(status, ',', count) SEPARATOR '|') FROM users GROUP BY user_name ORDER BY user_name; 
Смежные вопросы