2012-03-29 49 views
7

我有2個表格,用戶和下面。表格後面有一個名爲status的列。我想統計每個用戶按狀態分組的次數。mysql group_concat裏面有個count嗎?

以下查詢返回每個用戶的每種狀態類型的記錄。

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

嘿男人謝謝,那就是訣竅... – 2012-03-29 23:01:12

0

我不知道全表的定義,所以我創建的查詢僅使用user_name,狀態和計數。

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