MySql 将多条查询记录合并为一条记录
- 示例:
//表结构
CREATE TABLE `demo` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`a` int(11) DEFAULT '0',
`b` varchar(50) DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
//示例数据
id|a|b
1|1002|test
2|1001|test
select
GROUP_CONCAT(`a` SEPARATOR ',') as `a`,
GROUP_CONCAT(`b` SEPARATOR ',') as `b`
from demo;
//结果
a|b
1002,1001|test,test
select
GROUP_CONCAT(`a` ORDER BY `a` asc SEPARATOR ',') as `a`, -- 使用order by 排序
GROUP_CONCAT(DISTINCT `b` SEPARATOR ',') as `b` -- 使用 distinct 去除重复数据
from demo;
//结果
a|b
1001,1002|test
- 语法结构:
GROUP_CONCAT( [ DISTINCT ] expr [, expr...] [ ORDER BY { unsigned_integer | col_name | formula } [ ASC | DESC ] [, col...] ] [ SEPARATOR str_val ]
要点:
- 通过使用 DISTINCT 可以排除重复值。
- 如果希望对结果中的值进行排序,可以使用 ORDER BY 子句。
- SEPARATOR: 一个字符串值,它被用于插入到结果值中。缺省为一个逗号 (","),可以通过指定 SEPARATOR "" 完全地移除这个分隔符。
- group_concat_max_len:可以设置一个最大的长度。
语法:
SET [SESSION | GLOBAL] group_concat_max_len = unsigned_integer;
- 如果最大长度被设置,结果值未到达到该长度,则结果值会被增加到这个长度。
- 如果分组的字符过长,可以对系统参数进行设置:
SET @@global.group_concat_max_len=40000;
注意:group_concat_max_len在MySQL的配置文件中是有默认值的!最大值为1024,如果要想该函数按需求设置长度
SET GLOBAL group_concat_max_len=-1;
查看group_concat_max_len最大长度:show variables like 'group_concat_max_len';
文章目录
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
感谢!不错!