vlambda博客
学习文章列表

mysql查询结果拼接group_concat

mysql查询结果拼接group_concat

转载请标明出处^_^
原文首发于:https://www.zhangruibin.com
本文出自于:RebornChang的博客

作为数据库操作人员,经常会遇到业务上的人说,你帮我整个数据报表,比如说某个月的订单差额为X单,这X单的订单号分别为xxx,xxxxx,xxxxxxx,这时候我们就可以用mysql自带的函数group_concat来实现,先来看下效果

如上图所示,图中所显示的就是一条sql在数据库执行之后的查询效果:差异的订单数是3,后面会有差异的订单号的拼接字符串,这样可以直接看到订单号是哪些,这时候就用到了group_concat。

举例:

select a.provider,group_concat(a.orderId) ids,group_concat(a.remark separator '|') remarks from order_tab a where a.dingdanhao is null;

在上面那条sql里面,有两个group_concat,第一个group_concat(a.orderId),是将查询出来的结果集的orderId给拼接起来,默认的是使用逗号进行拼接;group_concat(a.remark separator '|')是使用 | 进行拼接。

那这时候就会有一个问题,查询group_concat相关资料会发现,group_concat默认拼接字符串长度是有限制的,默认长度为1024字节,那我遇到拼接出来的结果超过1024字节的话,默认是1024字节之后的是不显示的,这时候就需要我们修改系统设置,修改的方法大致分为以下两种:

1.直接在mysql控制台设置,此方法不用重启数据库,但是当数据库重启之后设置会失效 先查看数据库的group_concat长度

    SELECT @@global.group_concat_max_len;   show variables like "group_concat_max_len";   然后可以直接修改, 使用以下语句设置,设置为1024000,不够的话再加:

     SET GLOBAL group_concat_max_len=1024000;
SET SESSION group_concat_max_len=1024000;

1. 修改mysql的配置文件,然后重启数据库生效:

在my.ini里面增加配置项:

#[mysqld]
  group_concat_max_len=1024000

然后重启mysql服务,即可生效。