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

MySQL GROUP_CONCAT 聚合函數實戰:將多行合併為單字符串

     編輯:MySQL 綜合教學

場景示例

角色-用戶關係表 roles:


id | role_id | role_name
1  | 1       | 超級管理員
2  | 1       | 管理員
3  | 1       | 系統管理員
4  | 2       | 高級會員
5  | 3       | 普通會員
6  | 4       | 游客

核心 SQL


SELECT role_id, GROUP_CONCAT(role_name) AS roles
FROM roles
GROUP BY role_id;

結果:


role_id | roles
1       | 超級管理員,管理員,系統管理員
2       | 高級會員
3       | 普通會員
4       | 游客

進階用法


-- 自定義分隔符
GROUP_CONCAT(role_name SEPARATOR ' | ')

-- 去重
GROUP_CONCAT(DISTINCT role_name)

-- 排序後合併
GROUP_CONCAT(role_name ORDER BY role_name DESC)

-- 限制長度 (配合 group_concat_max_len)
SET SESSION group_concat_max_len = 10000;  -- 默認 1024 字節

跨庫對比

  • Oracle 11g+:LISTAGG(role_name, ',') WITHIN GROUP (ORDER BY role_name)
  • Oracle 10g-:WM_CONCAT(role_name)(非官方、不推薦)
  • PostgreSQL:STRING_AGG(role_name, ',')
  • SQL Server:STRING_AGG(role_name, ',') (2017+) / FOR XML PATH 舊版

性能提示

  • 大量行聚合時 group_concat_max_len 可能截斷,按需調大。
  • 配合索引 (role_id, role_name) 可避免臨時表排序。
  • 極大結果集建議應用層分批處理,避免單條 SQL 內存暴漲。

作者:yipbxx

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved