当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


MySQL GROUP_CONCAT方法用法及代码示例


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 TownerBenjamin 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                               |
+------+-----------------------------------------+

请注意,连接的记录现在由 ' / ' 分隔。

相关用法


注:本文由纯净天空筛选整理自Arthur Yanagisawa大神的英文原创作品 MySQL | GROUP_CONCAT method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。