Search code examples
mysqlsqlcountgroup-concat

Using COUNT in GROUP_CONCAT


This is my table:

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

The result I want should be string "3, 2, 3, 1" (count of items that belong to each company), because this is just part of my complex query string.

I tried to use this query:

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

But I got an error:

Error Number: 1111
Invalid use of group function

I have a feeling COUNT, MAX, MIN or SUM can't be used in GROUP_CONCAT. If so, do you know another way to do this?


Solution

  • You need to COUNT() with GROUP BY in an inner SELECT clause first and then apply GROUP_CONCAT();

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

    Output:

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

    Here is SQLFiddle demo.