#GROUP_CONCAT

group_concat
GROUP_CONCAT ( DISTINCT string , order_by_clause SEPARATOR sep_character )

GROUP_CONCAT函数在CONCAT函数的功能上增加了聚集功能,即对GROUP BY聚集的每个分组里的多行执行CONCAT操作,函数返回值是CLOB类型。

该函数不支持向量化计算。

DISTINCT

过滤在同一组内出现的相同string。

string

string须为字符型,或可转换为字符型的其他类型,但不允许为JSON、NVARCHAR、NCHAR和NCLOB类型。

当string为NULL时,函数返回NULL。

string参数可以为:

  • expr
  • 查询列为单列且返回行为单行的子查询

order_by_clause

对组内要CONCAT的string排序,其语法与SELECT语句中描述一致。

当ORDER BY后指定的是常量数字时,表示的是string的顺序值。

SEPARATOR sep_character

指定将组内的多行进行CONCAT时,多行之间加上sep_character定义的分隔符,sep_character只能为character类的常量或NULL。

此语句不指定时,默认为','。

示例(HEAP表)

--创建exprs_group表,并插入数据
CREATE TABLE exprs_group (expra INT,exprb CHAR(3));
INSERT INTO exprs_group VALUES(1, 'aaa');
INSERT INTO exprs_group VALUES(1, 'bbb');
INSERT INTO exprs_group VALUES(2, 'bbb');
INSERT INTO exprs_group VALUES(2, 'ccc');
INSERT INTO exprs_group VALUES(3, 'ccc');
INSERT INTO exprs_group VALUES(3, 'ddd');
COMMIT;
 
--未指定GROUP BY时,将所有行CONCAT,得到一行结果
SELECT GROUP_CONCAT(expra,exprb) res FROM exprs_group;
RES                                                             
----------------------------------------------------------------
1aaa,1bbb,2bbb,2ccc,3ccc,3ddd                                  
 
--group by后各组的多行数据分别CONCAT成一行,得到按组的多行结果
SELECT expra, GROUP_CONCAT(expra,exprb ORDER BY 2 SEPARATOR '$') res
FROM exprs_group
GROUP BY expra;
       EXPRA RES                                                             
------------ ----------------------------------------------------------------
           1 1aaa$1bbb                                                      
           2 2bbb$2ccc                                                      
           3 3ccc$3ddd      
 
--子查询
SELECT expra,GROUP_CONCAT((SELECT expra FROM exprs_group WHERE ROWNUM=1),exprb ORDER BY 2 SEPARATOR '$') res
FROM exprs_group
GROUP BY expra;
       EXPRA RES                                                             
------------ ----------------------------------------------------------------
           1 1aaa$1bbb                                                      
           2 1bbb$1ccc                                                      
           3 1ccc$1ddd
pdf-btn 下载文档
copy-btn 复制链接