测试数据

  1. drop table if exists order_detail;
  2. create table order_detail (
  3. id bigint auto_increment primary key,
  4. user_id bigint,
  5. product_id bigint,
  6. product_name varchar(255)
  7. ) comment '订单详情';
  8. insert into order_detail(user_id, product_id, product_name)
  9. VALUES (1, 1, '手机'), (1, 2, '平板'), (1, 3, '电脑'), (1, 4, '口红'),
  10. (2, 3, '电脑'), (2, 4, '口红'),
  11. (3, 2, '平板'), (3, 3, '电脑'), (3, 4, '口红');

基本使用方法

user_id 分组,将 product_name 合并到一行,MySQL 默认使用 , 分隔

  1. select user_id, group_concat(product_name)
  2. from order_detail
  3. group by user_id;

查询结果:

user_id group_concat(product_name)
1 手机,平板,电脑,口红
2 电脑,口红
3 平板,电脑,口红

自定义拼接字符

user_id 分组,将 product_name 合并到一行,自定义 ; 为拼接字符:

  1. select user_id, group_concat(product_name SEPARATOR ';')
  2. from order_detail
  3. group by user_id;

查询结果:

user_id group_concat(product_name SEPARATOR ‘;’)
1 手机;平板;电脑;口红
2 电脑;口红
3 平板;电脑;口红

拼接内容排序

需求:以 user_id 分组,并且要求并接时以 product_id 排序,可以在 GROUP_CONCAT 函数内增加 order by 排序

  1. select user_id, group_concat(product_name order by product_id)
  2. from order_detail
  3. group by user_id;

查询结果:

user_id group_concat(product_name order by product_id)
1 手机,平板,电脑,口红
2 电脑,口红
3 平板,电脑,口红