首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL GROUP_CONCAT 實現多行合併為單行:完整語法與實戰範例

     編輯:MySQL 綜合教學

核心函數

GROUP_CONCAT(expr) 將分組內非 NULL 的表達式值連接成單一字串,常用於「一對多」關係下將子表多行聚合為主表單行。

完整語法

GROUP_CONCAT([DISTINCT] expr [,expr ...]
  [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]]
  [SEPARATOR str_val])

關鍵選項說明

實戰範例

基本用法:學生成績聚合

SELECT student_name,
       GROUP_CONCAT(test_score)
FROM student
GROUP BY student_name;

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

SELECT student_name,
       GROUP_CONCAT(DISTINCT test_score
                    ORDER BY test_score DESC
                    SEPARATOR ' ')
FROM student
GROUP BY student_name;

長度限制與調整

結果長度受系統變數 group_concat_max_len 限制 (默認 1024 字節)。超長會被截斷。

調整方法:

-- 當前會話
SET SESSION group_concat_max_len = 10000;

-- 全域 (需重啟或配置文件永久生效)
SET GLOBAL group_concat_max_len = 10000;

應用場景

  • 訂單商品名稱彙總:GROUP_CONCAT(product_name SEPARATOR '、')
  • 用戶標籤聚合:GROUP_CONCAT(tag_name ORDER BY tag_id)
  • 報表導出:將多行明細合併為單元格內容
  • 標籤雲、分類路徑拼接等

注意事項

  • 僅聚合 非 NULL 值,NULL 會被忽略
  • 超過 group_concat_max_len 會靜默截斷,無報錯,務必按需調大
  • 大量數據聚合可能消耗較多記憶體,避免在無索引大表上濫用
  • 配合 GROUP BY 使用,確保分組邏輯正確
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
選項作用預設值
DISTINCT去除重複值不去重
ORDER BY指定連接前的排序無序
SEPARATOR自定義分隔符逗號 ','