MySQL 的 GROUP CONCAT 函式詳解

2021-08-10 20:07:00 字數 1754 閱讀 7926

group_concat(expr) 函式會從 expr 中連線所有非 null 的字串。如果沒有非 null 的字串,那麼它就會返回 null。語法如下:

假設有這樣一張領接表模型的樹型表 t_region,它的基本結構如下:

字段型別

大**明

region_id

int11

行政地區id

parent_id

int11

上級行政地區id

以逗號最為預設的連線字元

可以使用 distinct 過濾重複的值,也可以加入 order by 對值進行排序,還可以使用 separator 指定分隔符:

這裡的返回值以過濾了重複值,並且倒序排序,還使用了空格作為分隔符。

group_concat() 是有最大長度限制的,預設值是 1024。

可以通過 group_concat_max_len 引數進行動態設定。引數範圍可以是 global 或 session。

設定語法如下:

值是無符號整型,最大值與版本位數有關:

版本最小值

最大值32 位

44294967295

64 位

418446744073709551615

如果 group_concat_max_len 的值被設定為小等於 512,那麼 group_concat 的返回值型別是 varchar 或 varbinary;否則是 text 或 blob。

實際上,group_concat_max_len 的值可以設的更大,但會受到引數max_allowed_packet 的限制。

很多人不知道這一點,因為它只有在資料量較大的情況下才會出現。

使用預設值的情況:

可以看出,當總長度達到 1024 後,後面的記錄就被截斷掉咯。

group_concat_max_len 設定為最大值:

這樣設定之後,一般情況下,group_concat 就不會再出現字串被截斷的情況啦o(∩_∩)o~

Mysql分組資料合併group concat用法

group concat用法 預設用法 select group concat vaccine name as do accinename from t vaccine where id in select vaccine id from t dog vaccine where dog id 1 1...

MySQL 多行資料合併 GROUP CONCAT

表結構及資料 drop table if exists course create table course id int 11 not null,name varchar 50 default null comment 姓名 course name varchar 50 default null ...

MySQL 多行資料合併 GROUP CONCAT

表結構及資料 drop table if exists course create table course name varchar 255 character set utf8 collate utf8 general ci default null,course name varchar 25...