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를 사용하여 계산하지만 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, 상태)에서 CONCAT에 가입 테이블의 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

: