2013-07-04 18 views
9

To jest mój tabeli:Korzystanie COUNT w GROUP_CONCAT

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

Wynik chcę powinien być ciąg „3, 2, 3, 1”, ponieważ jest to tylko część mojego skomplikowanego łańcucha zapytania.

Próbowałem użyć tej kwerendy:

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

Ale mam błąd:

Numer błędu: 1111

Nieprawidłowe korzystanie z funkcji grupowej

Mam COUNT uczucie , MAX, MIN lub SUM nie mogą być użyte w GROUP_CONCAT. Jeśli tak, czy znasz inny sposób, aby to zrobić.

+0

dlaczego chcę to? Co się potem dzieje? – Strawberry

Odpowiedz

8

Trzeba COUNT() z GROUP BY w wewnętrzny wybierz pierwszy, a następnie zastosować GROUP_CONCAT()

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

wyjściowa:

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

Oto SQLFiddle demo

+0

Dziękuję bardzo, spędziłem dużo czasu, aby to naprawić. Niestety nie mam wystarczająco dużo czasu na grę, więc potrzebowałem pomocy, nawet jeśli ten wynik wygląda tak łatwo. – mesnicka

+0

@mesnicka Serdecznie witamy. Cieszę się, że mogłem pomóc :) – peterm

+0

Zauważ, że obecnie polega to na tym, że numery fk_company są ułożone sekwencyjnie, w sposób odpowiadający id – Strawberry

0
select GROUP_CONCAT(counts) 
    from (
     select count(id) counts from 
      table group by fk_company 
    );