首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL GROUP_CONCAT 函數詳解:將分組字段值合併為字串

     編輯:MySQL 資料庫相關知識

GROUP_CONCAT 是 MySQL 特有的聚合函數,能將同一分組內的多行字段值拼接成一個字串,常用於報表、標籤聚合、關聯數據扁平化輸出。

完整語法

GROUP_CONCAT([DISTINCT] expr [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC]] [SEPARATOR str_val])
  • DISTINCT:去除重複值。
  • ORDER BY:指定組內排序。
  • SEPARATOR:自定義分隔符,預設逗號 ,。

實戰範例

測試表 aa:

+------+------+
| id   | name |
+------+------+
| 1    | 10   |
| 1    | 20   |
| 1    | 20   |
| 2    | 20   |
| 3    | 200  |
| 3    | 500  |
+------+------+

基本用法:按 id 分組,name 用逗號連接

SELECT id, GROUP_CONCAT(name) FROM aa GROUP BY id;
+------+--------------------+
| id   | GROUP_CONCAT(name) |
+------+--------------------+
| 1    | 10,20,20           |
| 2    | 20                 |
| 3    | 200,500            |
+------+--------------------+

進階:去重 + 排序 + 自定義分隔符

SELECT id, GROUP_CONCAT(DISTINCT name ORDER BY name DESC SEPARATOR ';') AS names
FROM aa GROUP BY id;
+------+-------------+
| id   | names       |
+------+-------------+
| 1    | 20;10       |
| 2    | 20          |
| 3    | 500;200     |
+------+-------------+

注意事項

  1. 長度限制:預設最大 1024 字節,超截斷。可調大 group_concat_max_len(會話級或全局)。
  2. NULL 值會被自動忽略,不出現在結果中。
  3. 配合 FIND_IN_SET() 可反向查詢:「某值是否在分組字串中」。

常見應用場景

  • 標籤系統:文章標籤合併展示。
  • 關聯表扁平化:一對多關聯查詢時,將「多」端字段聚合為單列,減少應用層循環查詢。
  • 報表導出:將明細行合併為單元格內換行文本。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved