mysql多行合并一行group_concat函数用法举例

发布时间:2019-07-17编辑:脚本学堂
本文介绍了mysql合并行的函数group_concat的用法,在mysql中多行合并为一行使用函数group_concat来完成,一起学习下此函数的用法吧。

mysql/ target=_blank class=infotextkey>mysql数据库中,如何将表的几列合并到一行显示。
例如:
id name subject
1 小王 语文
2 小王 语文
3 小张 数学
4 小王 英语
我们想查询每个人有哪些课程 显示方式如
小王 语文,英文,语文
小明 语文
可能以前对于大部分人来说,先查询name,然后再分别由名称查询course【我以前也是这样做的】。
其实对于mysql数据库都支持将列合并到一行显示,即group_concat 函数,
group_concat 必须与 group by 一起使用

例子:
 

group_concat([distinct] expr [,expr ...] 
[order by {unsigned_integer | col_name | formula} [asc | desc] [,col ...]] 
[separator str_val]) 
 

可以看到我们在group_concat 函数中可以使用distinct,order by等以前使用
而separator则是显示使用什么样的链接字符。
对于以上查询可以
 

select name, group_concat( `subject` separator ','  ) from test group by name 

如果出现小王有两条语文课的记录,连接只想查询这样的结果,如何实现:
小王
语文,英文
小明
语文

可以使用distinct的函数 使用方法如下。
 

select name, group_concat( distinct test.`subject`  separator ','  ) from test group by test.`name` 

按课程排序,可以使用order  by
 

select name, group_concat( distinct test.`subject` order by subject separator ','  ) from test group by test.`name` 

注意,对于group_concat函数来说默认是有连接字符长度的限制。
它有系统变量group_concat_max_len限制,默认长度只有1024,如果超出1024将会被截取掉。

怎么样增大group_concat_max_len 的大小。
set [global | session] group_concat_max_len = val; 
 global设置全局group_concat_max_len,数据库不重启一直有效。
session设置当前会话group_concat_max_len,会话结束失效。

val设置的长度,自定义:
 

set session group_concat_max_len=102400;