当前位置: 首页 > article >正文

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(BOTH
            FROM
            XMLAGG(
                    XMLELEMENT(
                            E,
                            AREA_NAME || ',') ORDER BY AREA_CODE).EXTRACT('//text()')
           AS NAME_LIST
            FROM 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 服务


http://www.kler.cn/a/225260.html

相关文章:

  • 38 Opencv HOG特征检测
  • 二维码文件在线管理系统-收费版
  • 前端路由 Hash 和 History 模式原理对比区别
  • DDD(一)—— Authentication with JWT
  • springboot525基于MVC框架自习室管理和预约系统设计与实现(论文+源码)_kaic
  • 2501d,d.110
  • 【WPF.NET开发】优化性能:二维图形和图像处理
  • 抖音短视频矩阵营销系统源头独立开发搭建
  • 【PyRestTest】进行Benchmarking测试
  • C++进阶--多态
  • C/C++ C++入门
  • linux中vim的操作
  • 2024美赛 MCMProblem B: Searching for Submersibles 问题B 搜索潜水器 完整思路代码分享
  • ArcGIS Pro 如何计算长度和面积等数据?
  • 使用goland IDE编写go windows ui
  • 打造工业4.0的5G+边缘云服务产业生态,艾灵完成1.5亿元A轮融资
  • Unity中使用Ultraleap的InteractionButton组件
  • Spring Boot通过配置文件支持数据库自定义表名
  • CloudStack Agent 配置文件解析与含义
  • 【机器学习】贝叶斯垃圾邮件识别
  • 如何解决 docker registry x509 证书不信任问题?
  • Linux系统各目录作用
  • 微服务-微服务Alibaba-Nacos 源码分析 (源码流程图)
  • Leetcode 《面试经典150题》169. 多数元素
  • 蓝桥杯算法赛第4场小白入门赛强者挑战赛
  • 数据分析中需要用的的python知识(包括Numpy、Pandas、Matplotlib)