GROUP_CONCAT函数
函数语法
GROUP_CONCAT([DISTINCT] 要连接的字段 [ORDER BY 排序字段 ASC/DESC] [Separator ‘分隔符’])
函数效果
将一个字段的多个值合并到一行结果里,并使用分割符隔开。
举例说明
表结构如下:
CREATE TABLE `people` (
`id` bigint NOT NULL AUTO_INCREMENT,
`sex` int NOT NULL DEFAULT '0' COMMENT '性别 0未知,1男,2女',
`name` varchar(255) NOT NULL DEFAULT '' COMMENT '姓名',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
表中数据如下:
SELECT * FROM people;
id | sex | name |
---|---|---|
1 | 1 | 张三 |
2 | 2 | 小花 |
3 | 0 | 杀阡陌 |
4 | 1 | 李四 |
5 | 1 | 小明 |
6 | 2 | 美丽 |
7 | 0 | 大黄 |
8 | 0 | 大黄 |
默认: 以sex分组,将name合并到同一行结果里(默认分割符):
-- 默认使用','分割子项
SELECT
sex,
GROUP_CONCAT(name) names
FROM people
GROUP BY sex;
sex | names |
---|---|
0 | 杀阡陌,大黄,大黄 |
1 | 张三,李四,小明 |
2 | 小花,美丽 |
指定分割符: 以sex分组,将name合并到同一行结果里(指定 ‘;’ 为分割符):
-- 可以使用 separator 指定分割符
SELECT
sex,
GROUP_CONCAT(name separator ';') names
FROM people
GROUP BY sex;
sex | names |
---|---|
0 | 杀阡陌;大黄;大黄 |
1 | 张三;李四;小明 |
2 | 小花;美丽 |
排序: 以sex分组,将name合并到同一行结果里(指定 ‘;’ 为分割符,并对name进行排序):
-- 使用 ORDER BY 指定排序字段
SELECT
sex,
GROUP_CONCAT(name ORDER BY name DESC separator ';') names
FROM people
GROUP BY sex;
sex | names |
---|---|
0 | 杀阡陌;大黄;大黄 |
1 | 李四;张三;小明 |
2 | 美丽;小花 |
去重: 以sex分组,将name合并到同一行结果里(指定 ‘;’ 为分割符,对name进行排序去重):
-- 使用 ORDER BY 指定排序字段,并对name去重
SELECT
sex,
GROUP_CONCAT(DISTINCT name ORDER BY name DESC separator ';') names
FROM people
GROUP BY sex;
sex | names |
---|---|
0 | 杀阡陌;大黄 |
1 | 李四;张三;小明 |
2 | 美丽;小花 |
结语
努力学习阶段,有什么写的不对的希望大家多多指正,不胜感激。