MySQL中group_concat函数
完整的语法如下:
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
基本查询
mysql> select * from aa;
+------+------+
| id| name |
+------+------+
|1 | 10|
|1 | 20|
|1 | 20|
|2 | 20|
|3 | 200 |
|3 | 500 |
+------+------+
6 rows in set (0.00 sec)
以id分组,把name字段的值打印在一行,逗号分隔(默认)
mysql> select id,group_concat(name) from aa group by id;
+------+--------------------+
| id| group_concat(name) |
+------+--------------------+
|1 | 10,20,20|
|2 | 20 |
|3 | 200,500|
+------+--------------------+
3 rows in set (0.00 sec)
以id分组,把name字段的值打印在一行,分号分隔
mysql> select id,group_concat(name separator ';') from aa group by id;
+------+----------------------------------+
| id| group_concat(name separator ';') |
+------+----------------------------------+
|1 | 10;20;20 |
|2 | 20|
|3 | 200;500 |
+------+----------------------------------+
3 rows in set (0.00 sec)
以id分组,把去冗余的name字段的值打印在一行,
逗号分隔
mysql> select id,group_concat(distinct name) from aa group by id;
+------+-----------------------------+
| id| group_concat(distinct name) |
+------+-----------------------------+
|1 | 10,20|
|2 | 20 |
|3 | 200,500 |
+------+-----------------------------+
3 rows in set (0.00 sec)
以id分组,把name字段的值打印在一行,逗号分隔,以name排倒序
mysql> select id,group_concat(name order by name desc) from aa group by id;
+------+---------------------------------------+
| id| group_concat(name order by name desc) |
+------+---------------------------------------+
|1 | 20,20,10 |
|2 | 20|
|3 | 500,200|
+------+---------------------------------------+
3 rows in set (0.00 sec)
结论:group_concat()函数需要与group by语句在一起使用,才能得到需要的效果
不和group by一起使用,则返回一个值,包含所有的查询字段字符串
1.int字段的连接陷阱 当你用group_concat的时候请注意,连接起来的字段如果是int型,一定要转换成char再拼起来, 否则在你执行后(ExecuteScalar或者其它任何执行SQL返回结果的方法)返回的将不是一个逗号隔开的串, 而是byte[]。 该问题当你在SQLyog等一些工具中是体现不出来的,所以很难发现。
select group_concat(ipaddress) from t_ip 返回逗号隔开的串
select group_concat(id) from t_ip 返回byte[]
select group_concat(CAST(id as char)) from t_dep 返回逗号隔开的串
select group_concat(Convert(id , char)) from t_dep 返回逗号隔开的串
附Cast,convert的用法:
CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name)
CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。 这个类型 可以是以下值其中的 一个: BINARY[(N)] CHAR[(N)] DATE DATETIME DECIMAL SIGNED [INTEGER] TIME UNSIGNED [INTEGER]
2.长度陷阱 用group_concat连接字段的时候是有长度限制的,并不是有多少连多少。但你可以设置一下。
使用group_concat_max_len系统变量,你可以设置允许的最大长度。
程序中进行这项操作的语法如下,其中 val 是一个无符号整数: SET [SESSION | GLOBAL] group_concat_max_len = val;
若已经设置了最大长度, 则结果被截至这个最大长度。 在SQLyog中执行 SET GLOBAL group_concat_max_len = 10 后,
重新打开SQLyog,设置就会生效。
相关推荐
【GROUP_CONCAT】使用之MySQL官方文档翻译
本文通过实例介绍了MySQL中的group_concat函数的使用方法,需要的朋友可以适当参考下
GROUP_CONCAT函数可以拼接某个字段值成字符串,默认的分隔符是 逗号,即”,” , 如果需要自定义分隔符可以使用 SEPARATOR 如: SELECT GROUP_CONCAT(name SEPARATOR '_') FROM user 限制: GROUP_CONCAT...
本文实例讲述了mysql中GROUP_CONCAT的使用方法。分享给大家供大家参考,具体如下: 现在有三个表,结构如下: cate表: CREATE TABLE `cate` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', `...
MySQL中group_concat函数,完整的语法如下: 代码如下:group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’]) 基本查询 代码如下:select * from aa; 代码如下:+——+——+|...
在mysql中,有个函数叫“group_concat”,平常使用可能发现不了问题,在处理大数据的时候,会发现内容被截取了,其实MYSQL内部对这个是有设置的,默认不设置的长度是1024,如果我们需要更大,就需要手工去修改 ...
语法: GROUP_CONCAT([DISTINCT] expr [,expr …][ORDER BY {unsigned_integer | col_name | expr}[ASC | DESC] [,col_name …]][SEPARATOR str_val]) 下面演示一下这个函数,先建立一个学生选课表...
group_concat()函数的参数是可以直接使用order by排序的。...以上这篇浅谈MySQL中group_concat()函数的排序方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。
本文实例讲述了mysql group_concat()函数用法。分享给大家供大家参考,具体如下: ...group_concat函数应该是在内部执行了group by语句,这是我的猜测。 1.测试语句: SELECT group_concat(town) FROM `pl
最近在用MySQL做一些数据的预处理,经常会用到group_concat函数,比如类似下面一条语句 代码如下:mysql>select aid,group_concat(bid) from tbl group by aid limit 1; sql语句比较简单,按照aid分组,并且把相应的...
select group_concat(list_name) from aa_list 您可能感兴趣的文章:MySql采用GROUP_CONCAT合并多条数据显示...concat()函数用法总结MySQL统计函数GROUP_CONCAT使用陷阱分析mysql的group_concat函数使用示例MySQL中gro
主要介绍了mysql group_concat实现把分组字段写成一行的方法,结合实例形式分析了group_concat函数的功能、查询用法及相关操作技巧,需要的朋友可以参考下
主要介绍了MySql采用GROUP_CONCAT合并多条数据显示的方法,是MySQL数据库程序设计中常见的实用技巧,需要的朋友可以参考下