测试数据
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_detail
group 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_detail
group 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_detail
group by user_id;
查询结果:
user_id | group_concat(product_name order by product_id) |
---|---|
1 | 手机,平板,电脑,口红 |
2 | 电脑,口红 |
3 | 平板,电脑,口红 |