14

这是我的桌子:

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

我想要的结果应该是字符串“3, 2, 3, 1”(属于每个公司的项目数),因为这只是我复杂查询字符串的一部分。

我尝试使用此查询:

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

但我得到一个错误:

错误号:1111
组功能使用无效

我有一种感觉COUNT,,MAX或者MIN不能SUM用在GROUP_CONCAT。如果是这样,您知道另一种方法吗?

4

4 回答 4

17

您需要先COUNT()GROUP BY内部SELECT子句中使用,然后再应用GROUP_CONCAT()

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

输出:

| 碳纳米管 |
------------
| 3,2,3,1 |

这是SQLFiddle演示。

于 2013-07-04T06:27:58.413 回答
1

您还可以通过计算 GROUP_CONCAT 中的逗号(或任何分隔符)的数量来实现:

SELECT (LENGTH(GROUP_CONCAT(DISTINCT fk_company))-LENGTH(REPLACE(GROUP_CONCAT(DISTINCT fk_company), ',', '')))
FROM `table`
GROUP BY fk_company
于 2020-08-08T05:09:52.490 回答
0
select GROUP_CONCAT(counts) 
   from (
      select count(id) counts from
          table group by fk_company
   );
于 2013-07-04T06:26:48.013 回答
-1
SELECT A,  
GROUP_CONCAT(B SEPARATOR '/') AS 'Category',  
GROUP_CONCAT(C SEPARATOR '/') AS 'ALIAS_NAME',COUNT('ALIAS_NAME') AS 'Count'  
FROM carnews  
...  
...
GROUP BY 1
ORDER BY 4 DESC  

这在我的情况下效果很好。

于 2018-10-16T07:23:18.503 回答