GROUP_CONCAT()是MySQL数据库提供的一个函数,通常跟GROUP BY一起用,具体可参考MySQL官方文挡:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat。
语法:
GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])
1.例如:
SELECT student_id, GROUP_CONCAT(courses_id) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;
+------------+---------+
| student_id | courses |
+------------+---------+
| 2 | 3,4,5 |
+------------+---------+
2.当然分隔符还可以自定义,默认是以“,”作为分隔符,若要改为“|||”,则使用SEPARATOR来指定,例如:
SELECT student_id, GROUP_CONCAT(courses_id SEPARATOR '|||') AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;
+------------+---------+
| student_id | courses |
+------------+---------+
| 2 | 3|||4|||5 |
+------------+---------+
3.除此之外,还可以对这个组的值来进行排序再连接成字符串,例如按courses_id降序来排:
SELECT student_id, GROUP_CONCAT(courses_id ORDER BY courses_id DESC) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;
+------------+---------+
+------------+---------+
| student_id | courses |
+------------+---------+
| 2 | 5,4,3 |
+------------+---------+
4.需要注意的:
a.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]
b.长度陷阱
用了group_concat后,select里如果使用了limit是不起作用的.
用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` 结果的长度受到 `group_concat_max_len` 系统变量的限制,默认值为 1024 字节。如果结果超过了这个长度,将会被截断。可以通过以下语句动态调整这个值: ```sql SET SESSION group_concat_max_...
在配置文件中添加一行 `group_concat_max_len = 102400`,设定你期望的最大长度。这会永久改变MySQL服务器的默认设置。需要重启MySQL服务以使更改生效。 2. 动态设置会话变量: 如果你只是临时需要增加GROUP_...
需要注意的是,`GROUP_CONCAT`函数返回的字符串长度受到`group_concat_max_len`系统变量的限制。默认情况下,这个值是1024个字节,如果你需要处理更长的字符串,可以通过`SET`语句临时或全局地修改此变量的值: ```...
为了解决这个问题,你需要调整MySQL的`group_concat_max_len`系统变量。 `group_concat_max_len`变量决定了`GROUP_CONCAT`函数返回的最大长度。你可以通过以下两种方式来修改这个限制: 1. **临时修改(仅限当前...
MySQL中的GROUP_CONCAT()函数是一个非常实用的聚合函数,它允许你在分组查询时将同一组内的多个值合并成一个字符串。此函数主要用于数据分析和报表生成,尤其在处理多对多关系的数据时,能简化数据处理流程。在本文...
- `GROUP_CONCAT`默认返回的字符串长度有限制,可以通过设置`group_concat_max_len`系统变量来调整这个限制。 - `GROUP_CONCAT`中的`SEPARATOR`关键字用于指定各个元素之间的分隔符,如果不指定,默认使用逗号 `,`。...
作用: GROUP_CONCAT函数可以拼接某个字段值成字符串,默认的分隔符是 逗号,即...SHOW VARIABLES LIKE 'group_concat_max_len' 操作方法:(如图) 调整长度设置方法: (1)在MySQL配置文件中加入: 文件:my.ini
默认情况下,这个限制通常是1024个字符,可以通过修改`group_concat_max_len`系统变量来增大这个限制。 - 分隔符可以是任何字符串,例如空格、冒号或其他自定义的字符。例如,要使用分号作为分隔符,可以这样写:`...
GROUP_CONCAT常与其他函数一起使用,如CONCAT_WS。在示例中,`CONCAT_WS(', ', contactLastName, contactFirstName)`将名和姓用逗号连接,然后整个结果再用分号分隔。 总之,GROUP_CONCAT函数是MySQL中处理字符串...
需要注意的是,`GROUP_CONCAT()` 返回的结果是有限制的,这取决于 `group_concat_max_len` 系统变量。默认情况下,这个值可能只有 1024 字节,如果需要处理更长的字符串,可以通过设置此变量的值来增加限制,例如: ...
`GROUP_CONCAT()`函数的结果受到`group_concat_max_len`系统变量的限制,它定义了返回字符串的最大长度。默认情况下,这个值是1024个字节。你可以通过以下方式调整这个限制: ```sql SET [SESSION | GLOBAL] group_...
在Oracle数据库中,WM_CONCAT是一个非常实用的聚合函数,用于将一组字符串连接成一个单一的字符串,类似于SQL Server中的STRING_AGG或MySQL中的GROUP_CONCAT。然而,Oracle官方并没有提供这个函数,它是一个第三方...
2. GROUP_CONCAT 函数的结果集最大长度为 1024 字符,可以使用 `GROUP_CONCAT_MAX_LEN` 系统变量来调整结果集的最大长度。 3. GROUP_CONCAT 函数忽略空值,可以使用 `COALESCE` 函数来处理空值。 GROUP_CONCAT 函数...
不过,需要注意的是,GROUP_CONCAT返回的字符串长度受到系统变量`group_concat_max_len`的限制,超出部分会被截断,可以调整此变量来扩大最大长度。 总的来说,GROUP_CONCAT是MySQL提供的一种强大工具,能够方便地...