2012-03-29 39 views
7

tôi có 2 bảng, người dùng và sau. bảng sau có một cột có tên là trạng thái. Tôi muốn tính số lượng người dùng theo từng nhóm theo trạng thái.mysql group_concat với số lượng bên trong?

Truy vấn bên dưới trả về bản ghi cho từng loại trạng thái cho từng người dùng.

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 

lợi nhuận gì đó như:

user_name  status  count 

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

nhưng tôi muốn một cái gì đó thân thiện hơn như:

user_name  status_count 

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

cố gắng sử dụng group_concat và đếm nhưng didnt làm việc. Bất kì manh mối nào?

Trả lời

13

Bạn cần phải sử dụng GROUP BY hai lần, lần đầu tiên trên (user_id, tình trạng) từ sau để có được đếm sau đó trên user_id từ bảng tham gia để 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

xin cảm ơn người đàn ông đã làm điều đó ... –

0

Tôi không biết bảng đầy đủ các định nghĩa vì vậy tôi truy vấn được tạo, chỉ sử dụng user_name, trạng thái và số lượng.

SELECT user_name, GROUP_CONCAT(CONCAT(status, ',', count) SEPARATOR '|') FROM users GROUP BY user_name ORDER BY user_name; 
Các vấn đề liên quan