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