上一篇文章 跨表更新,看到本身寫的SQL像個憨憨寫了關於跨表個更新的內容。一年過的很快,文中後來的兩位員工 馮大
和 馮二
也要面對無情的 KPI 考覈了,他們工做乾的很不錯,performance 分別是 4 和 5html
新需求來了,靜悄悄的來了!!! 領導想要查看每一個 performance 下都有誰,同時要求將這些人的名稱要逗號拼接成一個字符串,也就是說要獲得下面的結果:mysql
要將結果集中某個指定的列進行字符串拼接,這要怎麼作呢?主角閃亮✨登場sql
在 Mysql 官方文檔 中,該函數被放在聚合函數章節,若是你要按照指定字段分組拼接,就要配合關鍵字 GROUP BY
來使用的segmentfault
該函數返回一個字符串結果,該字符串結果是經過分組串聯的
非NULL值
。若是沒有非NULL值,則返回NULL。完整語法以下:
GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])
What? 這個語法看着太複雜了吧,彆着急,下面會用例子慢慢說明逐一驗證滴微信
先完成文章開頭的需求:函數
SELECT performance, GROUP_CONCAT(employee_name) AS employees FROM employees GROUP BY performance;
zou是這個結果:學習
到這裏,領導給過來的需求就完成了😜spa
客官請留步,您點的菜還沒上完呢......3d
咱們是國際化的團隊,咱們的家鄉遍及五湖四海code
領導想關懷一下員工,要查看公司所有員工的家鄉都有哪些地方。員工們可能來自同一個地方,因此要將結果集去重複,DISTINCT
關鍵字就派上用場了
SELECT GROUP_CONCAT(DISTINCT home_town) FROM employees;
來看結果:
領導的關懷遍及五湖四海啊......
文案要改了,領導的關懷是遍及四海五湖
的, 那麼 ORDER BY
關鍵字就派上用場了
SELECT GROUP_CONCAT(DISTINCT home_town ORDER BY home_town DESC) AS '領導關懷地區' FROM employees; -- 沒我這麼起變量的哈,仍是漢語,我看你是瘋了
這裏你看到 GROUP_CONCAT
函數拼接字符串默認的分隔符是逗號 ,
, 領導不開心,逗號麼的感情,要用❕才能體現出關懷的強烈, SEPARATOR
關鍵字就派上用場了
分組拼接的值之間默認分隔符是逗號(,)。要明確指定分隔符,須要使用SEPARATOR
關鍵字,緊跟其後的是你想設置的分隔符。要徹底消除分隔符,就在SEPARATOR
關鍵字後面寫 '' 就行了
SELECT GROUP_CONCAT(DISTINCT home_town ORDER BY home_town DESC SEPARATOR '!') AS '領導關懷地區' FROM employees;
SELECT GROUP_CONCAT(DISTINCT home_town SEPARATOR '') AS '領導關懷地區' FROM employees;
這關懷到位了吧,你品,你細品!!!
領導的關懷能力也有限,拼接的字符串默認的最大長度是1024個字符,能夠經過下面語句查看當前限制是多少:
show variables like 'group_concat_max_len';
領導的能力但是飄忽不定的,因此咱們能夠靈活的設置這個值
SET [GLOBAL | SESSION] group_concat_max_len = val;
該語句在執行後,MySQL重啓以前一直有做用,一旦重啓 MySQL,則會恢復默認值
有時候 GROUP_CONCAT()
還要搭配 CONCAT_WS()
發揮出一點點威力,舉個簡單的例子
將消費者的名和姓用逗號進行分隔,而後再用
;
進行分隔
SELECT GROUP_CONCAT( CONCAT_WS(', ', contactLastName, contactFirstName) SEPARATOR ';') FROM customers;
這裏是 CONCAT_WS()函數用法, 很簡單,請自行查看吧......
GROUP_CONCAT()函數返回單個字符串,而不是值列表。這意味着咱們不能在 IN 運算符中使用GROUP_CONCAT()函數的結果,例如,在子查詢中, 像這樣:
SELECT id, name FROM table_name WHERE id IN GROUP_CONCAT(id);
在許多狀況下,咱們均可以應用GROUP_CONCAT()函數產生出有用的結果,同時也能夠結合其餘函數發揮出更大的威力. 單招學會了,就要學會連招 combo 了
我的博客:https://dayarch.top
加我微信好友, 進羣娛樂學習交流,備註「進羣」
歡迎關注個人公衆號 「日拱一兵」,趣味原創解析Java技術棧問題,將複雜問題簡單化,將抽象問題圖形化落地
若是對個人專題內容感興趣,或搶先看更多內容,歡迎訪問個人博客 dayarch.top