我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql GROUP_CONCAT函数详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mysql GROUP_CONCAT函数详解

文章目录

概要

` group_concat函数是mysql中非常实用的函数,它可以将同一个分组下的行拼接在一起。其完整语法:
GROUP_CONCAT([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’])

使用技巧

1. 建表、插入数据

#建表语句CREATE TABLE `test_group_concat` (  `id` int(11) NOT NULL COMMENT 'id',  `age` int(11) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;#插入测试数据INSERT INTO `test`.`test_group_concat` (`id`, `age`) VALUES (1, 20);INSERT INTO `test`.`test_group_concat` (`id`, `age`) VALUES (1, 20);INSERT INTO `test`.`test_group_concat` (`id`, `age`) VALUES (1, 10);INSERT INTO `test`.`test_group_concat` (`id`, `age`) VALUES (3, 30);INSERT INTO `test`.`test_group_concat` (`id`, `age`) VALUES (3, 40);INSERT INTO `test`.`test_group_concat` (`id`, `age`) VALUES (3, 40);INSERT INTO `test`.`test_group_concat` (`id`, `age`) VALUES (4, 50);INSERT INTO `test`.`test_group_concat` (`id`, `age`) VALUES (4, 60);#基本查询SELECT * FROM test_group_concat

在这里插入图片描述

2.以id分组,把age字段的值拼成一行,逗号分隔(默认)

select id,group_concat(age) from test_group_concat group by id;

在这里插入图片描述

3.以id分组,把age字段的值拼成 一行,分号分隔

select id,group_concat(age separator ';') from test_group_concat group by id;

在这里插入图片描述

4.以id分组,把去冗余的age字段的值打印在一行

select id,group_concat(distinct age) from test_group_concat group by id;

在这里插入图片描述

5.以id分组,把age字段的值打印在一行,逗号分隔,以age排倒序

select id,group_concat(age order by age desc) from test_group_concat group by id; 

在这里插入图片描述

发现问题

在项目用到如下sql

SELECTGROUP_CONCAT( c.goods_detail_id ) FROMair_out_order aLEFT JOIN air_out_order_detail b ON b.order_id = a.idLEFT JOIN air_out_good_record c ON c.order_detail_id = b.id; 

查询结果:

713278402284617792,722329309878140931,722329309878140949,722329309878140973,722329309878140939,715342356376936480,715342356376936482,715342356381130806,715342356376936484,715342356381130810,713278240841662516,713278240841662476,713278240841662520,715342356381130876,715342356381130940,715342356385325066,715342356385325132,715342356385325196,715342356385325260,715342356376936526,715342356381130812,715342356381130890,715342356381130964,744788201669005316,744788201669005380,744788201673199622,744788201669005330,744788201669005394,744788201752891404,744788201664811012,744788201669005344,744788201669005408,744788201752891418,744788201669005338,744788201669005410,744788201664811016,744788201669005354,744788201669005424,744788201664811030,744788201669005368,744788201673199616,744788201752891400,744788201669005312,745061736895352916,745061736891158544,745061736895352852,745061736895352930,745061736891158558,745061736895352866,745061736895352944,745061736891158572,745061736895352880,745061736895352958,74506173689115858

而实际上

SELECTc.goods_detail_idFROMair_out_order aLEFT JOIN air_out_order_detail b ON b.order_id = a.idLEFT JOIN air_out_good_record c ON c.order_detail_id = b.id;

的查询结果为:

713278402284617792722329309878140931,722329309878140949,722329309878140973,722329309878140939715342356376936480715342356376936482715342356381130806715342356376936484715342356381130810713278240841662516713278240841662476713278240841662520715342356381130876,715342356381130940,715342356385325066,715342356385325132,715342356385325196,715342356385325260,715342356376936526,715342356381130812,715342356381130890,715342356381130964744788201669005316,744788201669005380,744788201673199622,744788201669005330,744788201669005394,744788201752891404,744788201664811012,744788201669005344,744788201669005408,744788201752891418744788201669005338,744788201669005410,744788201664811016,744788201669005354,744788201669005424,744788201664811030,744788201669005368,744788201673199616,744788201752891400,744788201669005312745061736895352916,745061736891158544,745061736895352852,745061736895352930,745061736891158558,745061736895352866,745061736895352944,745061736891158572,745061736895352880,745061736895352958,745061736891158586,745061736895352894,745061736891158536,745061736895352844,745061736895352908,745061736895352922,745061736891158550,745061736895352858,745061736895352936,745061736891158564,745061736895352872,745061736895352950,745061736891158578,745061736895352886,745061736895352964,745061736891158528,745061736895352836,745061736895352900,745061736895352914,745061736891158542744788201669005318,744788201669005396,744788201669005334,744788201669005414,744788201669005352,744788201669005430,744788201664811022,744788201669005370,744788201752891394,744788201664811038744788201664811020,744788201669005382,744788201752891416,744788201664811040,744788201669005400,744788201669005328,744788201669005420,744788201669005350,744788201673199618,744788201664811008746171271546650637746171271550844964745061736895352842,745061736895352934,745061736895352862,745061736895352954,745061736891158548,745061736895352882,745061736891158568,745061736895352902,745061736895352832,745061736895352924747357984740646912,747357984912613376,747357984782589952,747357984824532992,747357984652566528747357984778395648747357984753229824745898989121159210,745898989108576268,745898989125353485,745898989116964869,745898989121159170,745898989121159184745898989112770564,745898989121159168,745898989121159186,745898989121159202,745898989108576272,745898989125353481745898989108576274,745898989116964877,745898989121159182,745898989121159206,745898989108576258,745898989116964865745898989116964879745898989112770562745898989116964871,745898989121159180,745898989121159208,745898989108576260,745898989121159172,745898989121159194745898989121159188,745898989125353477,745898989116964875,745898989121159198,745898989108576264,745898989121159178747357984694509568,747357984904224768,747357984749035520,747357984807755776,747357984849698816,747357984644177920,747357984883253248,747357984715481088,747357984770007040,747357984828727296747357984707092480,747357984795172864,747357984853893120,747357984895836160,747357984665149440,747357984736452608,747357984820338688,747357984866476032,747357984509960192,747357984916807680745898989121159196745898989121159200762832940033040386715342356385325082

要多得多,出现group_concat把数据给截断了,什么原因呢?

解决问题

由于group_concat有长度限制,默认1024个字符,
所以解决的办法也就是将group_concat有长度限制设置足够大即可。
1)临时解决方案:
在命令行运行

SET SESSION group_concat_max_len = 18446744073709551615;set global max_allowed_packet = 2*1024*1024*10;

2)永久解决方案:
首先找到mysql的配置文件,设置如下配置

max_allowed_packet = 20Mgroup_concat_max_len = 18446744073709551615

来源地址:https://blog.csdn.net/liqinglonguo/article/details/131097681

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mysql GROUP_CONCAT函数详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL函数CONCAT、CONCAT_WS、GROUP_CONCAT用法详解

目录mysql函数CONCAT、CONCAT_WS、GROUP_CONCAT1.concat()函数2.concat_ws()函数3.group_concat()函数补充:Mysql concat_ws、concat函数使用一、概念 con
2023-02-14

SQL函数Group_concat如何使用

本篇内容介绍了“SQL函数Group_concat如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!SQL函数Group_concat的
2023-03-06

MySQL GROUP_CONCAT限制解决方案

作用:GROUP_CONCAT函数可以拼接某个字段值成字符串,默认的分隔符是 逗号,即"," ,如果需要自定义分隔符可以使用 SEPARATOR如: SELECT GROUP_CONCAT(name SEPARATOR '_') FROM
2022-05-16

MySQL中CONCAT和GROUP_CONCAT方法的区别详解

例子表CREATE TABLE `book` (`id` int(11) NOT NUQdQcKZNxLL AUTO_INCREMENT,`book_name` varchar(255) CHARACTER SET utf8 COLLA
2023-01-05

SQL函数实现Group_concat用法

目录完整语法:还有几种扩展:完整语法:group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator 分隔符])SELECT * FROM `spythonqltes
SQL函数实现Group_concat用法
2024-08-26

SQL函数Group_concat的用法及说明

目录SQL函数Group_concat的用法完整语法如下Group_concat函数长度问题解决的方式有三个总结SQL函数Group_concat的用法完整语法如下group_concat([DISTINCT] 要连接的字段 [Orde
2023-03-02

sql中group_concat函数使用无效怎么解决

如果在使用SQL的GROUP_CONCAT函数时无效,可能是以下几个原因导致的:语法错误:请确保你的SQL语句语法正确,GROUP_CONCAT函数的语法是正确的。你可以参考数据库的文档或教程来确认语法的正确性。分组错误:GROUP_CON
sql中group_concat函数使用无效怎么解决
2024-04-09

详解MySQL聚合函数

目录聚合函数COUNT 函数SUM 函数AVG 函数MAX 函数 MIN 函数group by 子句简介示例:scott 数据库单列分组多列分组having 子句总结聚合函数在 mysql 中,聚合函数是用于计算多行数据的统计信息的函数,
2023-04-19

编程热搜

目录