MySQL 多行记录合并成一条

933 阅读1分钟

前两天在处理数据的时候,发现这样一个需求,有多条记录,他们存在某些字段数据不同,需要将他们合并在一起,不同的通过符号拼接在同一个字段中。对于这种我也是第一次操作,分享一下。

-- 建表语句
CREATE TABLE stumerge(
    id int(11) PRIMARY KEY,
    name VARCHAR(12),
    bir DATE
)

-- 添加数据
INSERT INTO stumerge(id,name,bir)VALUES(1,'yuqn1','2000-04-25'),
(2,'yuqn1','2000-04-26'),(3,'yuqn1','2000-04-26'),
(4,'yuqn1','2000-04-27'),(5,'yuqn1','2000-04-27'),
(6,'yuqn1','2000-04-27'),(7,'yuqn1','2000-04-28'),
(8,'yuqn1','2000-04-29'),(9,'yuqn1','2000-04-29')

-- 查询语句
SELECT * from stumerge

数据库内容如下:

image.png

需求,将相同出生日期的人通过‘,’拼接起来:

SELECT GROUP_CONCAT(name SEPARATOR ',')AS '姓名合集',
bir AS '出生日期' 
FROM student.stumerge 
-- WHERE id IN (1,2,3,4,5,6)
GROUP BY bir
ORDER BY bir DESC

注:该sql语句表示的是根据各个生日查询对应的人的合集,注释的内容表示只查对应id的人。
    GROUP_CONCAT(name SEPARATOR ',') 表示将所有记录的 name 合在一起,配合 GROUP BY ,可以做到通过出生日期筛选。
    GROUP_CONCAT 可以让多个字段集合。
    GROUP_CONCAT 集合过程中,如果某些字段并不会相同,则会导致每个字段会重新撑开一列。
    ORDER BY 表示排序。
    WHERE 必须要在 GROUP BY 之前,GROUP BY 必须要在 ORDER BY 之前。
    

结果如下:

image.png

如果反注释 WHERE ,则会赛选出指定 id 的人。

image.png

以上内容如有错误或者不足,请指出来。