2013-07-04 42 views
9

Đây là bàn của tôi:Sử dụng COUNT GROUP_CONCAT

id fk_company 
1   2  
2   2  
3   2  
4   4  
5   4  
6   11 
7   11 
8   11 
9   12 

Kết quả tôi muốn nên chuỗi "3, 2, 3, 1" bởi vì đây chỉ là một phần của chuỗi truy vấn phức tạp của tôi.

Tôi cố gắng để sử dụng truy vấn này:

SELECT GROUP_CONCAT(COUNT(id) SEPARATOR ", ") 
FROM `table` GROUP BY fk_company; 

Nhưng tôi đã nhận ra lỗi:

Error Number: 1111

sử dụng không hợp lệ của chức năng nhóm

Tôi có một COUNT cảm giác , MAX, MIN hoặc SUM không thể được sử dụng trong GROUP_CONCAT. Nếu vậy, bạn có biết cách khác để làm điều này không.

+0

Tại sao bạn muốn điều này? Chuyện gì xảy ra tiếp theo? – Strawberry

Trả lời

8

Bạn cần phải COUNT() với GROUP BY trong một bên chọn đầu tiên và sau đó áp dụng GROUP_CONCAT()

SELECT GROUP_CONCAT(cnt) cnt 
    FROM 
(
    SELECT COUNT(*) cnt 
    FROM table1 
    GROUP BY fk_company 
) q 

Output:

 
|  CNT | 
----------- 
| 3,2,3,1 | 

Đây là SQLFiddle bản demo

+0

Cảm ơn bạn rất nhiều, tôi đã dành rất nhiều thời gian để sửa lỗi này. Thật không may tôi không có đủ thời gian để chơi vì vậy tôi cần giúp đỡ ngay cả khi kết quả này trông rất dễ dàng. – mesnicka

+0

@mesnicka Bạn đang rất hoan nghênh. Tôi vui vì tôi có thể giúp :) – peterm

+0

Lưu ý rằng điều này hiện nay dựa trên thực tế là các số fk_company được sắp xếp tuần tự, theo cách tương ứng với id – Strawberry

0
select GROUP_CONCAT(counts) 
    from (
     select count(id) counts from 
      table group by fk_company 
    ); 
Các vấn đề liên quan