只需要使用GROUP_CONCAT函数可以在使用groupby分组后,将某个字段的值进行拼接合并
示例:
mysql--dba_admin@127.0.0.1:test 12:38:31>>select * from student; +----+-----------------+--------+ | id | class | name | +----+-----------------+--------+ | 1 | 一年级一班 | 张三 | | 2 | 一年级一班 | 李四 | | 3 | 一年级一班 | 王五 | | 4 | 一年级二班 | 测试 | | 5 | 一年级二班 | 张思 | +----+-----------------+--------+ 5 rows in set (0.00 sec)
mysql--dba_admin@127.0.0.1:test 12:40:13>>select class,group_concat(name) from student group by class; +-----------------+----------------------+ | class | group_concat(name) | +-----------------+----------------------+ | 一年级一班 | 张三,李四,王五 | | 一年级二班 | 测试,张思 | +-----------------+----------------------+ 2 rows in set (0.00 sec)
当然,还能自定义分隔符,在字段后面加上SEPARATOR ‘&’
mysql--dba_admin@127.0.0.1:test 12:40:17>>select class,group_concat(name SEPARATOR '&') from student group by class; +-----------------+----------------------------------+ | class | group_concat(name SEPARATOR '&') | +-----------------+----------------------------------+ | 一年级一班 | 张三&李四&王五 | | 一年级二班 | 测试&张思 | +-----------------+----------------------------------+ 2 rows in set (0.00 sec)
注意事项:GROUP_CONCAT函数要配合group by才能发挥作用哦
1、使用语法及特点:
GROUP_CONCAT([DISTINCT] expr [,expr …]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] [,col …]]
[SEPARATOR str_val])
在 MySQL 中,你可以得到表达式结合体的连结值。通过使用 DISTINCT 可以排除重复值。如果希望对结果中的值进行排序,可以使用 ORDER BY 子句,若要按相反顺序排序,请在ORDERBY子句中将DESC(降序)关键字添加到要排序的列的名称中,默认为升序。
SEPARATOR 是一个字符串值,它被用于插入到结果值中。缺省为一个逗号 (“,”),可以通过指定 SEPARATOR “” 完全地移除这个分隔符。
可以通过变量 group_concat_max_len 设置一个最大的长度,该系统变量的默认值为1024。
在运行时执行的句法如下:
SET [SESSION | GLOBAL] group_concat_max_len = unsigned_integer;
如果最大长度被设置,结果值被剪切到这个最大长度。
如果分组的字符过长,可以对系统参数进行设置:SET @@global.group_concat_max_len=40000;
参考链接:
https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html#function_group-concat