mysql group_concat里面有一个count?

时间:2012-03-29 22:16:04

标签: mysql

我有2个表,用户和以下。 table follow有一个名为status的列。我想计算每个用户按状态分组的次数。

以下查询返回每个用户的每种状态类型的记录。

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并计数但没有工作。有线索吗?

2 个答案:

答案 0 :(得分:13)

你需要使用GROUP BY两次,首先在(user_id,status)中从下面得到计数然后在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

答案 1 :(得分:0)

我不知道完整的表定义所以我创建了查询,它只使用user_name,status和count。

SELECT user_name, GROUP_CONCAT(CONCAT(status, ',', count) SEPARATOR '|')  FROM users GROUP BY user_name ORDER BY user_name;