欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL拼接字符串函數(shù)GROUP_CONCAT詳解

 更新時間:2020年02月04日 09:25:40   作者:日拱一兵  
本文給大家詳細講解了MySQL的拼接字符串函數(shù)GROUP_CONCAT的幾種使用方法以及詳細示例,有需要的小伙伴可以參考下

上一篇文章 跨表更新,看到自己寫的SQL像個憨憨寫了關(guān)于跨表個更新的內(nèi)容。一年過的很快,文中后來的兩位員工 馮大馮二 也要面對無情的 KPI 考核了,他們工作干的很不錯,performance 分別是 4 和 5

新需求來了,靜悄悄的來了?。?! 領(lǐng)導(dǎo)想要查看每個 performance 下都有誰,同時要求將這些人的名稱要逗號拼接成一個字符串,也就是說要得到下面的結(jié)果:

要將結(jié)果集中某個指定的列進行字符串拼接,這要怎么做呢?主角閃亮✨登場

GROUP_CONCAT(expr)

在 Mysql 官方文檔 中,該函數(shù)被放在聚合函數(shù)章節(jié),如果你要按照指定字段分組拼接,就要配合關(guān)鍵字 GROUP BY 來使用的

定義

該函數(shù)返回一個字符串結(jié)果,該字符串結(jié)果是通過分組串聯(lián)的非NULL值。如果沒有非NULL值,則返回NULL。完整語法如下:
GROUP_CONCAT([DISTINCT] expr [,expr ...]
       [ORDER BY {unsigned_integer | col_name | expr}
         [ASC | DESC] [,col_name ...]]
       [SEPARATOR str_val])

What? 這個語法看著太復(fù)雜了吧,別著急,下面會用例子慢慢說明逐一驗證滴

使用案例

先完成文章開頭的需求:

SELECT performance, GROUP_CONCAT(employee_name) AS employees
FROM employees
GROUP BY performance;

zou是這個結(jié)果:

到這里,領(lǐng)導(dǎo)給過來的需求就完成了😜

客官請留步,您點的菜還沒上完呢......

我們是國際化的團隊,我們的家鄉(xiāng)遍布五湖四海

領(lǐng)導(dǎo)想關(guān)懷一下員工,要查看公司全部員工的家鄉(xiāng)都有哪些地方。員工們可能來自同一個地方,所以要將結(jié)果集去重復(fù),DISTINCT 關(guān)鍵字就派上用場了

SELECT GROUP_CONCAT(DISTINCT home_town)
FROM employees;

來看結(jié)果:

領(lǐng)導(dǎo)的關(guān)懷遍布五湖四海啊......

文案要改了,領(lǐng)導(dǎo)的關(guān)懷是遍布四海五湖的, 那么 ORDER BY 關(guān)鍵字就派上用場了

SELECT GROUP_CONCAT(DISTINCT home_town ORDER BY home_town DESC) AS '領(lǐng)導(dǎo)關(guān)懷地區(qū)'
FROM employees;

-- 沒我這么起變量的哈,還是漢語,我看你是瘋了

這里你看到 GROUP_CONCAT 函數(shù)拼接字符串默認(rèn)的分隔符是逗號 ,, 領(lǐng)導(dǎo)不開心,逗號么的感情,要用❕才能體現(xiàn)出關(guān)懷的強烈, SEPARATOR 關(guān)鍵字就派上用場了

分組拼接的值之間默認(rèn)分隔符是逗號(,)。要明確指定分隔符,需要使用 SEPARATOR 關(guān)鍵字,緊跟其后的是你想設(shè)置的分隔符。要完全消除分隔符,就在 SEPARATOR 關(guān)鍵字后面寫 '' 就好了
SELECT GROUP_CONCAT(DISTINCT home_town ORDER BY home_town DESC SEPARATOR '!') AS '領(lǐng)導(dǎo)關(guān)懷地區(qū)'
FROM employees;

SELECT GROUP_CONCAT(DISTINCT home_town SEPARATOR '') AS '領(lǐng)導(dǎo)關(guān)懷地區(qū)'
FROM employees;

這關(guān)懷到位了吧,你品,你細品!?。?/p>

領(lǐng)導(dǎo)的關(guān)懷能力也有限,拼接的字符串默認(rèn)的最大長度是1024個字符,可以通過下面語句查看當(dāng)前限制是多少:

show variables like 'group_concat_max_len';

領(lǐng)導(dǎo)的能力可是飄忽不定的,所以我們可以靈活的設(shè)置這個值

SET [GLOBAL | SESSION] group_concat_max_len = val;

SESSION: 在當(dāng)前對話中生效 GLOBAL:全局都生效

該語句在執(zhí)行后,MySQL重啟之前一直有作用,一旦重啟 MySQL,則會恢復(fù)默認(rèn)值

有時候 GROUP_CONCAT() 還要搭配 CONCAT_WS() 發(fā)揮出一點點威力,舉個簡單的例子

將消費者的名和姓用逗號進行分隔,然后再用 ; 進行分隔
SELECT
  GROUP_CONCAT(
    CONCAT_WS(', ', contactLastName, contactFirstName)
    SEPARATOR ';')
FROM
  customers;

這里是 CONCAT_WS()函數(shù)用法, 很簡單,請自行查看吧......

注意⚠️

GROUP_CONCAT()函數(shù)返回單個字符串,而不是值列表。這意味著我們不能在 IN 運算符中使用GROUP_CONCAT()函數(shù)的結(jié)果,例如,在子查詢中, 像這樣:

SELECT
  id, name
FROM
  table_name
WHERE
  id IN GROUP_CONCAT(id);

總結(jié)

在許多情況下,我們都可以應(yīng)用GROUP_CONCAT()函數(shù)產(chǎn)生出有用的結(jié)果,同時也可以結(jié)合其他函數(shù)發(fā)揮出更大的威力. 單招學(xué)會了,就要學(xué)會連招 combo 了

相關(guān)文章

  • navicat連接mysql時出現(xiàn)1045錯誤的解決方法

    navicat連接mysql時出現(xiàn)1045錯誤的解決方法

    這篇文章主要為大家詳細介紹了navicat連接mysql時出現(xiàn)1045錯誤的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • mysql中count(), group by, order by使用詳解

    mysql中count(), group by, order by使用詳解

    mysql中order by 排序查詢、asc升序、desc降序,group by 分組查詢、having 只能用于group by子句、作用于組內(nèi),having條件子句可以直接跟函數(shù)表達式。使用group by 子句的查詢語句需要使用聚合函數(shù)。
    2017-05-05
  • MySQL中組合字段之concat()

    MySQL中組合字段之concat()

    這篇文章主要介紹了MySQL中組合字段之concat(),MySQL是關(guān)系型數(shù)據(jù)庫,我們在使用的時候往往會將對象的屬性映射成列存儲在表中,因此查詢的到的結(jié)果在不做任何處理的情況下,也是一個個單獨的屬性,需要的朋友可以參考一下
    2021-11-11
  • CentOS7.x卸載與安裝MySQL5.7的操作過程及編碼格式的修改方法

    CentOS7.x卸載與安裝MySQL5.7的操作過程及編碼格式的修改方法

    這篇文章主要介紹了CentOS7.x卸載與安裝MySQL5.7的操作過程及編碼格式的修改方法,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • 面試提問mysql一張表到底能存多少數(shù)據(jù)

    面試提問mysql一張表到底能存多少數(shù)據(jù)

    這篇文章主要為大家介紹了面試提問mysql一張表到底能存多少數(shù)據(jù)的問題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • mysql 字段as詳解及實例代碼

    mysql 字段as詳解及實例代碼

    這篇文章主要介紹了mysql 字段as詳解,并附實例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • MySQL查詢數(shù)據(jù)庫中某個庫、表、索引等所占空間的大小

    MySQL查詢數(shù)據(jù)庫中某個庫、表、索引等所占空間的大小

    MySQL是一個非常流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它的查詢操作是非常強大和靈活的。查詢的效率不僅取決于表的大小,而且還取決于索引的大小,本文主要介紹了MySQL查詢數(shù)據(jù)庫中某個庫、表、索引等所占空間的大小,感興趣的可以了解一下
    2024-01-01
  • 經(jīng)典mysql連接查詢例題

    經(jīng)典mysql連接查詢例題

    本文通過一個有趣的例子向我們介紹了mysql連接查詢,采用了子查詢和連接查詢混合和多次連接查詢,需要的朋友可以參考下
    2015-07-07
  • MySql?InnoDB存儲引擎之Buffer?Pool運行原理講解

    MySql?InnoDB存儲引擎之Buffer?Pool運行原理講解

    緩沖池是用于存儲InnoDB表,索引和其他輔助緩沖區(qū)的緩存數(shù)據(jù)的內(nèi)存區(qū)域。緩沖池的大小對于系統(tǒng)性能很重要。更大的緩沖池可以減少磁盤I/O來多次訪問同一表數(shù)據(jù)。在專用數(shù)據(jù)庫服務(wù)器上,可以將緩沖池大小設(shè)置為計算機物理內(nèi)存大小的百分之80
    2023-01-01
  • 詳細介紹基于MySQL的搜索引擎MySQL-Fullltext

    詳細介紹基于MySQL的搜索引擎MySQL-Fullltext

    這篇文章主要詳細介紹基于MySQL的搜索引擎MySQL-Fullltext,需要用到C和C#以及JavaScript的知識,屬于MySQL的高階應(yīng)用,需要的朋友可以參考下
    2015-04-04

最新評論