group_concat函数概念
group_concat
是 MySQL 中的一个非常有用的聚合函数,它可以将来自多个记录行的列值连接成一个字符串结果。这个函数特别适用于需要将多行数据合并为单个字符串值的场景,例如,将某个分类下的所有产品名称合并成一个由逗号分隔的字符串。
创建数据:
Create table If Not Exists aaa (id int, name varchar(30)); Truncate table aaa; insert into aaa (id, name) values ( '1', 'A'); insert into aaa (id, name) values ( '1', 'A'); insert into aaa (id, name) values ( '1', 'A'); insert into aaa (id, name) values ( '1', 'B'); insert into aaa (id, name) values ( '1', 'D'); insert into aaa (id, name) values ( '1', 'C'); insert into aaa (id, name) values ( '2', 'A'); insert into aaa (id, name) values ( '2', 'C'); insert into aaa (id, name) values ( '2', 'C'); insert into aaa (id, name) values ( '2', 'C'); insert into aaa (id, name) values ( '2', 'D'); insert into aaa (id, name) values ( '3', 'A'); insert into aaa (id, name) values ( '3', 'B'); insert into aaa (id, name) values ( '3', 'B'); insert into aaa (id, name) values ( '3', 'B'); insert into aaa (id, name) values ( '3', 'D'); insert into aaa (id, name) values ( '4', 'B'); insert into aaa (id, name) values ( '4', 'C'); insert into aaa (id, name) values ( '4', 'E');
函数用法
-- 常用用法 group_concat( distinct 需要合并的字段 order by 排序字段 separator ‘指定分隔符(默认为逗号',')’)
1.根据id 分组 使name字段 在一列显示 默认逗号分隔
select id,group_concat(name) from aaa group by id;
2.根据id 分组 使name字段 在一列显示 指定分隔符','分隔
select id,group_concat(name separator ';') from aaa group by id;
3.根据id 分组 使name字段 在一列显示 默认分隔符 去重
select id,group_concat(distinct name) from aaa group by id;
4.根据id 分组 使name字段 在一列显示 默认分隔符 按name 排序
select id,group_concat(name order by name) from aaa group by id;
特殊用法
1.查询 每个id中 是否存在 我们需要的 name
group_concat为聚合函数,所以我们可以在having 对其进行判断
源数据:
例:查询那些id中含有 A B D
select id from aaa group by id having group_concat(distinct name) like '%A%' and group_concat(distinct name) like '%B%' and group_concat(distinct name) like '%D%';