今天在公司,接到一个需求,还没有动手的时候,觉得好难,做不出来的感觉。需求是把两个字段的值显示在一个格子里。并且以id的形式分组。花了10多分钟,把效果实现了,才发现原来这么简单。
一、创建数据库以及插入数据
create database student #创建数据库 student
create table user( #创建表 user
id int ,
name varchar(20) not null,
course varchar(20) not null
)
insert into user values(1,'小明','语文') #插入数据
insert into user values(1,'小明','数学')
insert into user values(1,'小明','英语')
insert into user values(2,'小张','化学')
insert into user values(2,'小张','地理')
insert into user values(2,'小张','语文')
二、group_concat的语法
语法如下:
group_concat([distinct] 要连接的字段 [order asc/desc 排序字段] [separator '分隔符'])
三、通过group_concat拼接两个字段
我想把两个字段的值显示在一个格子里。并且把字段名也要显示出来。以id的形式分组。
代码如下:
select
u.id,
group_concat(distinct u.`name`,':',u.course separator ', ') as 拼接姓名和成绩
from `user` u
where
1=1
group by u.id
记得在字段前面加上distinct 去重,否则字段会出现重复的
拼接效果如下:
四、总结
group_concat可以多个字段拼接,并且可以进行分组。字段与字段之间可以用分隔符隔开。为了美观,我在separator的分隔符后面加了很多空格。看起来更加舒服、整齐。