本文主要是介绍listagg、xmlagg、group_concat()函数用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
三种聚合函数
- listagg函数
- XMLAGG函数
- GROUP_CONCAT()函数
listagg函数
listagg 是oracle数据库中的函数,可以使用指定连接符将字符串连接。
如有表 AREAS:
CREATE TABLE AREAS
(AREA_CODE VARCHAR(32) NULL COMMENT '地区编码',AREA_NAME VARCHAR(32) NULL COMMENT '地区名称',AREA_PID VARCHAR(32) NULL COMMENT '父级地区编码'
);
将符合某条件的全部数据中的地区名称罗列出来,并以“|”分隔开
数据库语句为
SELECT LISTAGG(AREA_NAME, '|') WITHIN GROUP (ORDER BY AREA_CODE) AS NAME_LIST FROM AREAS;
返回结果:
北京市|长沙市|长沙县|万科城市花园|重庆市|房聚首府小区|芙蓉区|衡阳市|黄冈市|黄石市|湖北省|湖南省|荆门市|君山区|君山壹号|开福区|浏阳市|宁乡市|上海市|天津市|天心区|望城区……
这种方式的缺点是长度有限。返回值为VARCHAR2类型,最大字节长度为4000,超过这个长度会报错。
XMLAGG函数
同样的表,同样的条件,使用XMLAGG函数:
SELECT TRIM(BOTHFROMXMLAGG(XMLELEMENT(E,AREA_NAME || ',') ORDER BY AREA_CODE).EXTRACT('//text()')AS NAME_LISTFROM AREAS;
或者换一种写法:
SELECT XMLAGG(XMLPARSE(CONTENT AREA_NAME || '|' WELLFORMED) ORDER BY AREA_CODE).GETCLOBVAL()
FROM AREAS;
XMLAGG函数在长度限制方面要更宽松,返回的类型为CLOB,最大字节长度为32767。
GROUP_CONCAT()函数
上述两种均是oracle中的函数。
GROUP_CONCAT()是mysql中的函数。
同样的表和查询,在mysql数据库中,使用group_concat()函数:
SELECT GROUP_CONCAT(AREA_NAME ORDER BY AREA_CODE ASC SEPARATOR '|') AS NAME_LIST FROM AREAS;
GROUP_CONCAT()函数的长度限制为1024字节。
不过可以通过数据库配置来修改这个长度,最大可以设置为102400。
可以通过修改my.ini配置文件方式进行设置
group_concat_max_len = 102400
也可以通过命令设置
SET GLOBAL group_concat_max_len = 102400;
SET SESSION group_concat_max_len = 102400;
需要注意的是,设置后,需要重启 mysql 服务。
这篇关于listagg、xmlagg、group_concat()函数用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!