MySQL 的 GROUP_CONCAT(~)
方法将同一组中的非 NULL 值连接在一起。
注意
连接值的最大允许长度由系统变量 group_concat_max_len
控制,默认值为 1024
。
用法
SELECT column1,
GROUP_CONCAT(DISTINCT column2
ORDER BY column2 ASC|DESC
SEPARATOR ' ')
FROM table
GROUP BY column2
例子
请考虑下表了解学生是否持有驾驶执照:
student_id |
full_name |
年龄 |
has_license |
---|---|---|---|
1 |
天空镇 |
17 |
0 |
2 |
本·戴维斯 |
19 |
1 |
3 |
特拉维斯·苹果 |
18 |
0 |
4 |
亚瑟·大卫 |
16 |
0 |
5 |
本杰明镇 |
17 |
1 |
可以使用此处的代码创建上述示例表。
基本用法
连接同龄学生的全名:
SELECT age, GROUP_CONCAT(full_name)
FROM drivers_license
GROUP BY age;
+------+--------------------------+
| age | GROUP_CONCAT(full_name) |
+------+--------------------------+
| 16 | Arthur David |
| 17 | Sky Towner,Benjamin Town |
| 18 | Travis Apple |
| 19 | Ben Davis |
+------+--------------------------+
由于 Sky Towner
和 Benjamin Town
都是 17,因此我们返回连接的两个名称。
DISTINCT
按 has_license
分组并连接每组中的不同年龄:
SELECT has_license, GROUP_CONCAT(DISTINCT age)
FROM drivers_license
GROUP BY has_license;
+-------------+----------------------------+
| has_license | GROUP_CONCAT(DISTINCT age) |
+-------------+----------------------------+
| 0 | 16,17,18 |
| 1 | 17,19 |
+-------------+----------------------------+
排序依据
要指定值的连接顺序:
SELECT age, GROUP_CONCAT(full_name ORDER BY student_id DESC)
FROM drivers_license
GROUP BY age;
+------+--------------------------------------------------+
| age | GROUP_CONCAT(full_name ORDER BY student_id DESC) |
+------+--------------------------------------------------+
| 16 | Arthur David |
| 17 | Benjamin Town,Sky Towner |
| 18 | Travis Apple |
| 19 | Ben Davis |
+------+--------------------------------------------------+
在 17 岁组中,学生 ID 较大的学生 'Benjamin Town'
首先串联,然后是 'Sky Towner'
。
SEPARATOR
使用 ' / '
作为连接的分隔符:
SELECT age, GROUP_CONCAT(full_name SEPARATOR ' / ')
FROM drivers_license
GROUP BY age;
+------+-----------------------------------------+
| age | GROUP_CONCAT(full_name SEPARATOR ' / ') |
+------+-----------------------------------------+
| 16 | Arthur David |
| 17 | Sky Towner / Benjamin Town |
| 18 | Travis Apple |
| 19 | Ben Davis |
+------+-----------------------------------------+
请注意,连接的记录现在由 ' / '
分隔。
相关用法
- MySQL GROUP_CONCAT()用法及代码示例
- MySQL GROUP BY用法及代码示例
- MySQL GREATEST()用法及代码示例
- MySQL GET_FORMAT()用法及代码示例
- MySQL GET_FORMAT方法用法及代码示例
- MySQL Group_CONCAT()用法及代码示例
- MySQL ROUND()用法及代码示例
- MySQL REPEAT()用法及代码示例
- MySQL POWER()用法及代码示例
- MySQL LEAD() and LAG()用法及代码示例
- MySQL IS_IPV4()用法及代码示例
- MySQL RADIANS方法用法及代码示例
- MySQL VARIANCE方法用法及代码示例
- MySQL WEEK()用法及代码示例
- MySQL TIME_FORMAT方法用法及代码示例
- MySQL CURTIME()用法及代码示例
- MySQL weekofyear()用法及代码示例
- MySQL Convert()用法及代码示例
- MySQL IS NOT用法及代码示例
- MySQL FROM_BASE64()用法及代码示例
- MySQL LEFT方法用法及代码示例
- MySQL UCASE方法用法及代码示例
- MySQL PI()用法及代码示例
- MySQL CONCAT()用法及代码示例
- MySQL UPPER方法用法及代码示例
注:本文由纯净天空筛选整理自Arthur Yanagisawa大神的英文原创作品 MySQL | GROUP_CONCAT method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。