當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。