需求:
1.分组情况下 将同一列数据以‘-’为拼接符展示出来
2.将查询出来多个字段拼接为1个字段并携带连接符
创建以下表信息:
drop table if exists tb_student;
/*==============================================================*/
/* Table: tb_student */
/*==============================================================*/
create table tb_student
(
stu_id bigint(12) not null auto_increment comment 'ID',
name varchar(36) comment '学生名字',
sex varchar(6) comment '性别0:男1:女2:待补充',
address varchar(255) comment '地址',
age int(4) comment '年龄',
create_by bigint(20) comment '创建人',
create_time datetime default CURRENT_TIMESTAMP comment '创建时间',
modify_by bigint(20) comment '修改人',
modify_time datetime default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
remark varchar(500) comment '备注',
rec_status int(4) comment '逻辑删除',
primary key (stu_id)
)
charset = utf8mb4;
alter table tb_student comment '学生表';
解决方案
1.分组情况下 将同一列数据以‘_’为拼接符展示出来
题目: 相同的学生年龄分组 获取 学生姓名用_拼接
用mysql函数GROUP_CONCAT使用方法
select GROUP_CONCAT( name SEPARATOR '_' ) name, age from student group by age
执行结果:
name age
张三_李四_王五 12
赵六 13
宋琪_高雄 14
说明: GROUP_CONCAT(name) 可以直接使用 默认为,拼接 如哦要别的拼接要用关键字SEPARATOR 结合一起使用
2.将查询出来多个字段拼接为1个字段并携带连接符
不分组情况下
题目:将student表中 信息name,age,sex 顺序一致,并以一个字段查询出来用’_'分割
用mysql函数CONCAT使用方法:
select CONCAT(name,'_',age,'_',sex,'_') from student
以上方法适用于少数 如果字段为10个20个 要用到CONCAT_WS。函数的第一位是分隔符
select CONCAT_WS('_',name,age,sex) from student
说明:分隔符不能为null,如果为null,则返回结果为nul
分组情况下
题目:相同的学生年龄age分组 获取 name,address,sex用’_'拼接
select GROUP_CONCAT(CONCAT_ROW('_',name,address,sex)) from student group by age
说明: DISTINCT 去重
GROUP_CONCAT(DISTINCT name,address, sex order by age separator '_')
通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是拼接符的关键字,缺省为一个逗号。