天天看點

mysql查詢結果拼接group_concatmysql查詢結果拼接group_concat

mysql查詢結果拼接group_concat

轉載請标明出處^_^

原文首發于: https://www.zhangruibin.com

本文出自于: RebornChang的部落格

作為資料庫操作人員,經常會遇到業務上的人說,你幫我整個資料報表,比如說某個月的訂單差額為X單,這X單的訂單号分别為xxx,xxxxx,xxxxxxx,這時候我們就可以用mysql自帶的函數group_concat來實作,先來看下效果

mysql查詢結果拼接group_concatmysql查詢結果拼接group_concat

如上圖所示,圖中所顯示的就是一條sql在資料庫執行之後的查詢效果:差異的訂單數是3,後面會有差異的訂單号的拼接字元串,這樣可以直接看到訂單号是哪些,這時候就用到了group_concat。

舉例:

select a.provider,group_concat(a.orderId) ids,group_concat(a.remark separator '|') remarks from order_tab a where a.dingdanhao is null;
           

在上面那條sql裡面,有兩個group_concat,第一個group_concat(a.orderId),是将查詢出來的結果集的orderId給拼接起來,預設的是使用逗号進行拼接;group_concat(a.remark separator ‘|’)是使用 | 進行拼接。

那這時候就會有一個問題,查詢group_concat相關資料會發現,group_concat預設拼接字元串長度是有限制的,預設長度為1024位元組,那我遇到拼接出來的結果超過1024位元組的話,預設是1024位元組之後的是不顯示的,這時候就需要我們修改系統設定,修改的方法大緻分為以下兩種:

  1. 直接在mysql控制台設定,此方法不用重新開機資料庫,但是當資料庫重新開機之後設定會失效

    先檢視資料庫的group_concat長度

SELECT @@global.group_concat_max_len;   show variables like "group_concat_max_len";

然後可以直接修改, 使用以下語句設定,設定為1024000,不夠的話再加:

SET GLOBAL group_concat_max_len=1024000;
     SET SESSION group_concat_max_len=1024000; 
           
  1. 修改mysql的配置檔案,然後重新開機資料庫生效:

在my.ini裡面增加配置項:

#[mysqld]
  group_concat_max_len=1024000
           

然後重新開機mysql服務,即可生效。