详解MySQL - group_concat合并列

发布时间:2025-05-15 13:05:23 作者:益华网络 来源:undefined 浏览量(2) 点赞(2)
摘要:简介 MySQL GROUP_CONCAT()函数将组中的字符串连接成为具有各种选项的单个字符串,也就是实现列的合并。 测试 创建一个测试表进行测试 createtabletest_classes(std_namevarchar(200),class_namevarchar(200));insert&n

 简介

MySQL GROUP_CONCAT()函数将组中的字符串连接成为具有各种选项的单个字符串,也就是实现列的合并。

测试

创建一个测试表进行测试

create table test_classes (std_name varchar(200),class_name varchar(200)); insert into test_classes (std_name  , class_name ) value ("小明","二班") , ("小红","二班") ,("小刚","二班"), ("小强","一班"), ("小白","三班") ,("小鱼","三班"); 

需求:查出三个班级各有什么人,并使用一个字符串的字段显示。

这时候直接使用group_concat一个语句就可以直接完成。

select class_name , group_concat(std_name)  As std_names from test_classes group by class_name ; 

这里需要根据班级来显示,所以需要使用group_by进行分组

+------------+----------------------+ | class_name | std_names            | +------------+----------------------+ | 一班       | 小强                 | | 三班       | 小白,小鱼            | | 二班       | 小明,小红,小刚       | +------------+----------------------+

 排序:在group_concat也是支持排序的。

select class_name , group_concat(std_name order by std_name)  As std_names from test_classes group by class_name ;   

+------------+----------------------+ | class_name | std_names            | +------------+----------------------+ | 一班       | 小强                 | | 三班       | 小白,小鱼            | | 二班       | 小刚,小明,小红       | +------------+----------------------+

 

去重:可以使用DISTINCT进行去重。

insert into test_classes (std_name  , class_name ) value ("小明","二班"); insert into test_classes (std_name  , class_name ) value ("小明","二班"); select class_name , group_concat(DISTINCT(std_name))  As std_names from test_classes group by class_name ;

+------------+----------------------+ | class_name | std_names            | +------------+----------------------+ | 一班       | 小强                 | | 三班       | 小白,小鱼            | | 二班       | 小刚,小明,小红       | +------------+----------------------+

 合并多列:可以配合CONCAT_WS将多列合并成一个字符串。

select group_concat(CONCAT_WS(的,class_name,std_name) SEPARATOR ;)  As std_names from test_classes ;   SEPARATOR 是指定分隔符 ```sql +---------------------------------------------------------------------------------------------------------------------------------+ | std_names                                                                                                                       | +---------------------------------------------------------------------------------------------------------------------------------+ | 二班的小明;二班的小红;二班的小刚;一班的小强;三班的小白;三班的小鱼;二班的小明;二班的小明                                         | +---------------------------------------------------------------------------------------------------------------------------------+

 长度限制

GROUP_CONCAT这个函数是有最大长度限制的,如果超过这个长度限制,得到的字符串就是被截取后的结果,不会报错,所以需要注意。

这个是长度是由变量group_concat_max_len控制的。

show variables like "group_concat_max_len"; 

可以通过修改这个变量来放大限制。

SET GLOBAL group_concat_max_len=102400; SET SESSION group_concat_max_len=102400; 

 配置文件就需要在mysqld的配额节进行配置

[mysqld] group_concat_max_len=102400 

 【编辑推荐】

为写论文向Linux提交「恶意代码」,结果整个大学都被Linux封了 Python中那些神一样的算法 自从上了SkyWalking,睡觉真香!!! 熬了三个晚上总结的Python 200个标准库!建议收藏 到底什么是MySQL执行计划吗?

二维码

扫一扫,关注我们

声明:本文由【益华网络】编辑上传发布,转载此文章须经作者同意,并请附上出处【益华网络】及本页链接。如内容、图片有任何版权问题,请联系我们进行处理。

感兴趣吗?

欢迎联系我们,我们愿意为您解答任何有关网站疑难问题!

您身边的【网站建设专家】

搜索千万次不如咨询1次

主营项目:网站建设,手机网站,响应式网站,SEO优化,小程序开发,公众号系统,软件开发等

立即咨询 15368564009
在线客服
嘿,我来帮您!