测试数据
drop table if exists order_detail;create table order_detail (id bigint auto_increment primary key,user_id bigint,product_id bigint,product_name varchar(255)) comment '订单详情';insert into order_detail(user_id, product_id, product_name)VALUES (1, 1, '手机'), (1, 2, '平板'), (1, 3, '电脑'), (1, 4, '口红'),(2, 3, '电脑'), (2, 4, '口红'),(3, 2, '平板'), (3, 3, '电脑'), (3, 4, '口红');
基本使用方法
以 user_id 分组,将 product_name 合并到一行,MySQL 默认使用 , 分隔
select user_id, group_concat(product_name)from order_detailgroup by user_id;
查询结果:
| user_id | group_concat(product_name) |
|---|---|
| 1 | 手机,平板,电脑,口红 |
| 2 | 电脑,口红 |
| 3 | 平板,电脑,口红 |
自定义拼接字符
以 user_id 分组,将 product_name 合并到一行,自定义 ; 为拼接字符:
select user_id, group_concat(product_name SEPARATOR ';')from order_detailgroup by user_id;
查询结果:
| user_id | group_concat(product_name SEPARATOR ‘;’) |
|---|---|
| 1 | 手机;平板;电脑;口红 |
| 2 | 电脑;口红 |
| 3 | 平板;电脑;口红 |
拼接内容排序
需求:以 user_id 分组,并且要求并接时以 product_id 排序,可以在 GROUP_CONCAT 函数内增加 order by 排序
select user_id, group_concat(product_name order by product_id)from order_detailgroup by user_id;
查询结果:
| user_id | group_concat(product_name order by product_id) |
|---|---|
| 1 | 手机,平板,电脑,口红 |
| 2 | 电脑,口红 |
| 3 | 平板,电脑,口红 |
