mysql group by 多個行轉換為一個字段
更新時間:2025年08月26日 11:53:59 作者:悟能不能悟
本文主要介紹了mysql group by 多個行轉換為一個字段,可以使用聚合函數GROUP_CONCAT()函數,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
在 MySQL 中,將多行數據合并為 ?單個字段? 可以使用聚合函數 GROUP_CONCAT()
。這是處理「多行轉單字段」場景(如合并列表、標簽聚合等)的標準解決方案。以下是詳細說明和示例:
核心語法
SELECT 分組字段, GROUP_CONCAT([DISTINCT] 合并字段 [ORDER BY 排序字段] [SEPARATOR '分隔符']) FROM 表名 GROUP BY 分組字段;
DISTINCT
:去重ORDER BY
:結果排序SEPARATOR
:自定義分隔符(默認逗號,
)
示例場景
原始數據表user_skills
user_id | skill |
---|---|
1 | Java |
1 | Python |
1 | SQL |
2 | JavaScript |
2 | HTML |
目標:每個用戶合并技能列表
user_id | skills |
---|---|
1 | Java, Python, SQL |
2 | JavaScript, HTML |
實現 SQL
SELECT user_id, GROUP_CONCAT(skill SEPARATOR ', ') AS skills FROM user_skills GROUP BY user_id;
高級用法
1. 結果去重 + 排序
SELECT user_id, GROUP_CONCAT(DISTINCT skill ORDER BY skill ASC -- 按字母升序排序 SEPARATOR ' / ') -- 自定義分隔符 FROM user_skills GROUP BY user_id;
結果:
user_id | skills |
---|---|
1 | Java / Python / SQL |
2 | HTML / JavaScript |
2. 關聯表合并字段(多表 JOIN)
SELECT u.user_id, u.user_name, GROUP_CONCAT(s.skill) AS skills FROM users u JOIN user_skills s ON u.user_id = s.user_id GROUP BY u.user_id, u.user_name;
?? 重要參數
GROUP_CONCAT()
受系統(tǒng)變量限制:
?長度限制?:默認 1024 字符
-- 臨時調高限制(當前會話有效) SET SESSION group_concat_max_len = 1000000;
?截斷處理?:超過長度時自動截斷(不會報錯)
對比其他方案
方法 | 適用場景 | 特點 |
---|---|---|
GROUP_CONCAT() | 多行合并為單字段(字符串) | 靈活的分隔符和排序控制 |
子查詢 + JSON_ARRAY() | 需要結構化數據輸出 | MySQL 5.7+ 支持 |
應用層代碼處理 | 復雜合并邏輯 | 更靈活但增加網絡傳輸 |
復雜案例:合并多列數據
SELECT department, GROUP_CONCAT( CONCAT(employee_name, ':', salary) -- 合并姓名和薪資 ORDER BY salary DESC SEPARATOR ' | ' ) AS emp_data FROM employees GROUP BY department;
結果示例:
department | emp_data |
---|---|
Sales | Bob:8500 |
IT | Tom:9500 |
通過 GROUP_CONCAT() 可以高效實現多行轉單字段的需求,特別適合生成標簽云、合并列表等業(yè)務場景。
到此這篇關于mysql group by 多個行轉換為一個字段的文章就介紹到這了,更多相關mysql group by 轉換為一個字段內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:
相關文章
深入解析MySQL中的Redo Log、Undo Log和Binlog
本文詳細介紹了MySQL中的RedoLog、UndoLog和Binlog的背景、業(yè)務場景、功能、底層實現原理以及使用措施,通過Java代碼示例展示了如何與這些日志進行交互,進一步深化了對MySQL日志系統(tǒng)的理解,理解并合理使用這些日志,可以有效地提升數據庫的性能和可靠性2024-10-10