数据库 
首页 > 数据库 > 浏览文章

MySQL统计函数GROUP_CONCAT使用陷阱分析

(编辑:jimmy 日期: 2025/4/24 浏览:3 次 )

本文实例分析了MySQL统计函数GROUP_CONCAT使用中的陷阱。分享给大家供大家参考,具体如下:

最近在用MySQL做一些数据的预处理,经常会用到group_concat函数,比如类似下面一条语句
复制代码 代码如下:mysql>select aid,group_concat(bid) from tbl group by aid limit 1;

sql语句比较简单,按照aid分组,并且把相应的bid用逗号串起来。这样的句子大家可能都用过,也可能不会出问题,但是如果bid非常多的话,你就要小心了,比如下面的提示信息:

Query OK, XXX rows affected, 1 warning (3 min 45.12 sec)

怎么会有警告呢,打出来看看:

mysql> show warnings;
+---------+------+-----------------------------------------+
| Level  | Code | Message                 |
+---------+------+-----------------------------------------+
| Warning | 1260 | 1 line(s) were cut by GROUP_CONCAT()  |
+---------+------+-----------------------------------------+

居然被GROUP_CONCAT截断了我的结果,查了一下手册,原来GROUP_CONCAT有个最大长度的限制,超过最大长度就会被截断掉,你可以通过下面的语句获得:

mysql> SELECT @@global.group_concat_max_len;
+-------------------------------+
| @@global.group_concat_max_len |
+-------------------------------+
|           1024   |
+-------------------------------+

1024这就是一般MySQL系统默认的最大长度,如果你的bid串起来大于这个就会出问题,好在有解决的办法:

1.在MySQL配置文件中加上

group_concat_max_len = 102400 #你要的最大长度

2.可以简单一点,执行语句:

mysql> SET GLOBAL group_concat_max_len=102400;
Query OK, 0 rows affected (0.01 sec)

再执行group_concat语句就不会出问题了,另外手册上还给出了group_concat的详细用法,给个示例你就明白了:
复制代码 代码如下:mysql>select aid,group_concat(bid order by bid separator ',') as bid_str from tbl group by aid;
还可以排序和设置分隔符,功能强大。

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》、《MySQL数据库锁相关技巧汇总》及《MySQL常用函数大汇总》

希望本文所述对大家MySQL数据库计有所帮助。

上一篇:MySQL出现SQL Error (2013)连接错误的解决方法
下一篇:MySQL的InnoDB扩容及ibdata1文件瘦身方案完全解析
一句话新闻
高通与谷歌联手!首款骁龙PC优化Chrome浏览器发布
高通和谷歌日前宣布,推出首次面向搭载骁龙的Windows PC的优化版Chrome浏览器。
在对骁龙X Elite参考设计的初步测试中,全新的Chrome浏览器在Speedometer 2.1基准测试中实现了显著的性能提升。
预计在2024年年中之前,搭载骁龙X Elite计算平台的PC将面世。该浏览器的提前问世,有助于骁龙PC问世就获得满血表现。
谷歌高级副总裁Hiroshi Lockheimer表示,此次与高通的合作将有助于确保Chrome用户在当前ARM兼容的PC上获得最佳的浏览体验。