MYSQL拼接函数GROUP_CONCAT、CONCAT、CONCAT_WS使用讲解

需求:

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是拼接符的关键字,缺省为一个逗号。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值