2012-03-29 16 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を使用してみましたし、カウントが、didntの仕事。すべての手がかりは?私は完全なテーブル定義をそれほど知らない

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 

答えて

13

あなたが最初に(user_idは、状態)から連結に結合されたテーブルからのuser_idで、その後カウントを取得するには、以下に、二回GROUP BYを使用する必要がありますuser_name、status、およびcountだけを使用して作成されたクエリ。

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

こんにちは、ありがとう、それはトリックを行った... –

0