作用 GROUP_CONCAT 是 MySQL 中用於將查詢結果集中的多行數據合併為單個字元串的聚合函數。它將每行數據的指定欄位值連接起來,並以指定的分隔符分隔,最終返回一個包含所有值的字元串。 以下是 GROUP_CONCAT 函數的一般語法: SELECT GROUP_CONCAT(column ...
作用
GROUP_CONCAT 是 MySQL 中用於將查詢結果集中的多行數據合併為單個字元串的聚合函數。它將每行數據的指定欄位值連接起來,並以指定的分隔符分隔,最終返回一個包含所有值的字元串。
以下是 GROUP_CONCAT 函數的一般語法:
SELECT GROUP_CONCAT(column_name SEPARATOR ', ') FROM table_name GROUP BY group_column;
- column_name:要連接的欄位名。
- SEPARATOR:可選參數,用於指定連接不同值時使用的分隔符,預設為逗號。
- table_name:表名。
- group_column:分組列,用於指定對哪個列進行分組。
性能問題
- 記憶體消耗:
GROUP_CONCAT
可能導致記憶體消耗較大,特別是在處理大量數據時,需要註意記憶體使用情況。 - 字元串長度限制:預設情況下,
GROUP_CONCAT
返回的字元串長度有限制(預設為1024位元組),如果超出限制會截斷字元串。可以通過設置group_concat_max_len
參數調整最大長度。 - 性能優化:對於大數據量的情況,可以考慮通過增加
group_concat_max_len
的值或者拆分查詢來提高性能。另外,避免在大表上頻繁使用GROUP_CONCAT
也是一種優化策略。 - 索引利用:在使用
GROUP_CONCAT
時,確保相關欄位有索引,可以提高查詢效率。
總的來說,GROUP_CONCAT
在某些場景下非常方便,但在處理大量數據時需要註意潛在的性能問題,合理使用並結合其他優化手段可以提升查詢效率。希望這些信息對你有所幫助。如果有其他問題,請隨時告訴我。
業務場景
- 有表business_function,表示一個功能
- 有表business_function_product_r,表示這個功能所屬於的產品列表
- 一個功能可以對應多個產品
- 如果直接使用left join組合的話,如果遇到多個產品關係時,會一個功能多條記錄,這在分頁時,會有問題
GROUP_CONCAT和FIND_IN_SET實現組合和檢索
select a.id,
a.title,
a.title_eng,
a.code,
a.description,
a.is_display,
a.is_enable,
a.category_id,
GROUP_CONCAT(r.product_id) AS functions
from business_function a
left join business_function_product_r r on a.id = r.function_id
group by a.id,
a.title,
a.title_eng,
a.code,
a.description,
a.is_display,
a.is_enable,
a.category_id
HAVING FIND_IN_SET(4, functions) > 0
分組併進行行轉列的結果會在functions列,每個值用逗號分開
作者:倉儲大叔,張占嶺,
榮譽:微軟MVP
QQ:853066980
支付寶掃一掃,為大叔打賞!