MySQL合并多行数据

2021-10-25 From 程序之心 By 丁仪

GROUP_CONCAT() 是 MySQL 的高级函数,用于聚合多行的数据到一行。如果有数据会返回字符串,否则返回 null。

GROUP_CONCAT() 的语法如下,DISTINCT 用于去重,ORDER BY 用于排序,SEPARATOR 用于自定义分隔符。

GROUP_CONCAT(  
   [DISTINCT] expression  
   [ORDER BY expression]
   [SEPARATOR sep]
);  

GROUP_CONCAT() 最大长度限制默认是 1024,超过限制的部分会被截断。可以通过 group_concat_max_len 参数进行动态设置,范围可以是 Global 或 Session。如果 group_concat_max_len 的值被设置为小于等于 512,那么 GROUP_CONCAT 的返回值类型是 VARCHAR 或 VARBINARY;否则是 TEXT 或 BLOB。

示例如下,首先创建测试表。

CREATE TABLE IF NOT EXISTS `userTest` (
   `id` INT(11) AUTO_INCREMENT,
   `name` VARCHAR(32),
   `sex` VARCHAR(32),
   PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=UTF8MB4;

插入测试数据。

insert into userTest(name,sex)
values
('李明',"男"),
('张三','男'),
('小红','女'),
('小英','女');

执行 GROUP_CONCAT 查询。

select sex, GROUP_CONCAT(`name`) as nameList
from userTest
group by sex;

+------+---------------+
| sex  | nameList      |
+------+---------------+
| 女   | 小红,小英     |
| 男   | 李明,张三     |
+------+---------------+
2 rows in set (0.01 sec)

执行 GROUP_CONCAT 查询,并指定排序字段

select sex, GROUP_CONCAT(`name` ORDER BY id desc) as nameList
from userTest
group by sex;

+------+---------------+
| sex  | nameList      |
+------+---------------+
| 女   | 小英,小红     |
| 男   | 张三,李明     |
+------+---------------+
2 rows in set (0.00 sec)

执行 GROUP_CONCAT 查询,并指定排序字段和分隔符。

select sex, GROUP_CONCAT(`name` ORDER BY id desc SEPARATOR '-') as nameList
from userTest
group by sex;

+------+---------------+
| sex  | nameList      |
+------+---------------+
| 女   | 小英-小红     |
| 男   | 张三-李明     |
+------+---------------+
2 rows in set (0.00 sec)

本文来源:程序之心,转载请注明出处!

君子曰:学不可以已。
《分布式算法精髓》
互联网是一个分布式系统,无线通信、云计算或并行计算、多核系统、移动网络也是如此。蚁群、大脑甚至人类社会都可以被建模为分布式系统。本书强调这些分布式系统中共同涉及的主题和技术,特别是强调分布式系统设计中的一些基本问题,涵盖通信、协调、容错性、本地性、并行性、打破对称性、同步化、不确定性等。
发表感想

© 2016 - 2024 chengxuzhixin.com All Rights Reserved.

浙ICP备2021034854号-1    浙公网安备 33011002016107号