背景
因業務需要匯總數據,匯總條件較復雜,所以想匯總時獲取所有匯總數據的ID,以便后續使用。
功能
將 group by 產生的同一個分組中的值連接起來,返回一個字符串結果。
語法
group_concat( [distinct] 要連接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
說明:通過使用distinct可以排除重復值;如果希望對結果中的值進行排序,可以使用order by子句;separator是一個字符串值,缺省為一個逗號。
案例
select GROUP_CONCAT(registno order by registno desc separator ',') from icp_claim_info
到生產才發現,group_concat默認是1024 字節,ID是27位,加上默認的分隔符“,” 一位,所以一條數據占28字節。換言之,group_concat 的默認配置只支持36條數據。
這個在官方文檔中也有說明,針對版本機器有最大的值。
限制
1.用了group_concat后,select 里如果使用了 limit 是不起作用的
2.用group_concat連接字段的時候是有長度限制的,並不是有多少連多少。但你可以設置一下。
3.使用group_concat_max_len系統變量,你可以設置允許的最大長度。
4.系統默認的分隔符是逗號
修改方式
方式一:直接控制台上設置立即生效
【必須操作】更改全局配置
SET GLOBAL group_concat_max_len=102400;
【可選操作】使配置在當前會話中也立即生效,其它已經登錄的會話終端需要重啟生效
SET SESSION group_concat_max_len=102400;
方式二:修改MySQL配置文件my.cnf,在[mysqld]節點中添加
group_concat_max_len = 102400 #你要的最大長度
使用方式一進行修改
查詢修改結果
show variables like 'group_concat_max_len';
因為項目的匯總數據量不確定,所以最終棄用了 group_concat 。