在 GROUP_CONCAT 中使用 COUNT
Posted
技术标签:
【中文标题】在 GROUP_CONCAT 中使用 COUNT【英文标题】:Using COUNT in GROUP_CONCAT 【发布时间】:2013-07-02 00:56:20 【问题描述】:这是我的桌子:
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
。如果是这样,您知道另一种方法吗?
【问题讨论】:
你为什么要这个?接下来会发生什么? 【参考方案1】:您需要先在内部SELECT
子句中使用COUNT()
和GROUP BY
,然后再应用GROUP_CONCAT()
;
SELECT GROUP_CONCAT(cnt) cnt
FROM (
SELECT COUNT(*) cnt
FROM table1
GROUP BY fk_company
) q;
输出:
|碳纳米管 | ------------ | 3,2,3,1 |这里是 SQLFiddle 演示。
【讨论】:
非常感谢,我花了很多时间来解决这个问题。不幸的是我没有足够的时间玩,所以即使这个结果看起来很简单,我也需要帮助。 请注意,目前这依赖于 fk_company 编号以与 id 对应的方式按顺序排列的事实【参考方案2】:您也可以通过计算 GROUP_CONCAT 中的逗号(或任何分隔符)的数量来实现:
SELECT (LENGTH(GROUP_CONCAT(DISTINCT fk_company))-LENGTH(REPLACE(GROUP_CONCAT(DISTINCT fk_company), ',', '')))
FROM `table`
GROUP BY fk_company
【讨论】:
【参考方案3】:select GROUP_CONCAT(counts)
from (
select count(id) counts from
table group by fk_company
);
【讨论】:
【参考方案4】: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
这对我来说效果很好。
【讨论】:
以上是关于在 GROUP_CONCAT 中使用 COUNT的主要内容,如果未能解决你的问题,请参考以下文章
在 Netezza 中使用 GROUP_CONCAT 时缺少 ORDER BY 的解决方法
如何在 sql [重复] 中使用 group_concat() 获取不同的值