mysql中的group_concat函数

本文介绍了如何在MySQL中使用GROUP_CONCAT函数将多张表的关联字段合并,如用户与课程表,以实现数据的高效整理和展示。通过LEFTJOIN和GROUPBY操作,可以指定分隔符并控制返回结果的最大长度。
摘要由CSDN通过智能技术生成

概述

今天产品让我导出一批数据,大概是四五张表的一个联查,但是其中有一个字段的需要多个字段拼接起来,大概就是这样:

a  1
a  2
a  3
b  4
b  5

最后需要展示成这样:

a  1,2,3
b  4,5

可以使用mysql聚合函数中的group_concat函数:

group_concat

作用:将属于同一组的非空列拼接起来,并且返回。比如上面使用分组查询的话,1、2、3就属于a这一组,4、5就属于b这一组。

语法:

GROUP_CONCAT([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [SEPARATOR str_val])

官网文档

举例:

t_usert_course两张表举例:

mysql> select * from t_user;
+---------+-----------+-----+
| user_no | user_name | age |
+---------+-----------+-----+
| 123456  | 张三      |  18 |
| 456789  | 李四      |  20 |
+---------+-----------+-----+
2 rows in set (0.00 sec)

mysql> select * from t_course;
+---------+-----------+-------------+
| user_no | course_no | course_name |
+---------+-----------+-------------+
| 123456  | 1         | 数学        |
| 123456  | 2         | 英语        |
| 123456  | 3         | 语文        |
| 456789  | 1         | 数学        |
+---------+-----------+-------------+
4 rows in set (0.00 sec)

使用group_concat函数就可以完成把属于同一组的非空列以指定分隔符连接在一起:

mysql> SELECT
    ->  t1.user_no,
    ->  GROUP_CONCAT( t2.course_name SEPARATOR '; ') as courses
    -> FROM
    ->  t_user t1
    ->  LEFT JOIN t_course t2 ON t1.user_no = t2.user_no
    -> GROUP BY
    ->  t1.user_no;
+---------+------------------------+
| user_no | courses                |
+---------+------------------------+
| 123456  | 数学; 语文; 英语       |
| 456789  | 数学                   |
+---------+------------------------+
2 rows in set (0.00 sec)
  • 组中值之间的默认分隔符是逗号 ,。要显式指定分隔符,请使用SEPARATOR后跟应插入组值之间的字符串文字值。要完全消除分隔符,请指定 SEPARATOR ''

  • 最大长度group_concat_max_len ,默认值为 1024。该值可以设置得更高,但返回值的有效最大长度受 max_allowed_packet值的限制 。在运行时更改 的值的语法 group_concat_max_len如下,其中*val* 是无符号整数:

    SET [GLOBAL | SESSION] group_concat_max_len = val;
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值