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.