mysql中將查詢結果進行拼接處理及concat、group_concat的使用

說明:sql

本文中使用的例子均在下面的數據庫表tt2下執行:數據庫

 

1、concat()函數
一、功能:將多個字符串鏈接成一個字符串。函數

二、語法:concat(str1, str2,...).net

返回結果爲鏈接參數產生的字符串,若是有任何一個參數爲null,則返回值爲null。3d

三、舉例:blog

例1:select concat (id, name, score) as info from tt2;排序

 

中間有一行爲null是由於tt2表中有一行的score值爲null。字符串

例2:在例1的結果中三個字段id,name,score的組合沒有分隔符,咱們能夠加一個逗號做爲分隔符:it

 

這樣看上去彷佛順眼了許多~~select

可是輸入sql語句麻煩了許多,三個字段須要輸入兩次逗號,若是10個字段,要輸入九次逗號...麻煩死了啦,有沒有什麼簡便方法呢?——因而能夠指定參數之間的分隔符的concat_ws()來了!!!

 

2、concat_ws()函數
一、功能:和concat()同樣,將多個字符串鏈接成一個字符串,可是能夠一次性指定分隔符~(concat_ws就是concat with separator)

二、語法:concat_ws(separator, str1, str2, ...)

說明:第一個參數指定分隔符。須要注意的是分隔符不能爲null,若是爲null,則返回結果爲null。

三、舉例:

例3:咱們使用concat_ws()將 分隔符指定爲逗號,達到與例2相同的效果:

 

例4:把分隔符指定爲null,結果所有變成了null:

 

 

3、group_concat()函數
前言:在有group by的查詢語句中,select指定的字段要麼就包含在group by語句的後面,做爲分組的依據,要麼就包含在聚合函數中。(有關group by的知識請戳:淺析SQL中Group By的使用)。

例5:

 

該例查詢了name相同的的人中最小的id。若是咱們要查詢name相同的人的全部的id呢?

固然咱們能夠這樣查詢:

例6:

 

可是這樣同一個名字出現屢次,看上去很是不直觀。有沒有更直觀的方法,既讓每一個名字都只出現一次,又可以顯示全部的名字相同的人的id呢?——使用group_concat()

一、功能:將group by產生的同一個分組中的值鏈接起來,返回一個字符串結果。

二、語法:group_concat( [distinct] 要鏈接的字段 [order by 排序字段 asc/desc  ] [separator '分隔符'] )

說明:經過使用distinct能夠排除重複值;若是但願對結果中的值進行排序,可使用order by子句;separator是一個字符串值,缺省爲一個逗號。

三、舉例:

例7:使用group_concat()和group by顯示相同名字的人的id號:

 

例8:將上面的id號從大到小排序,且用'_'做爲分隔符:

 

例9:上面的查詢中顯示了以name分組的每組中全部的id。接下來咱們要查詢以name分組的全部組的id和score:

 

轉載:https://blog.csdn.net/mary19920410/article/details/76545053 

相關文章
相關標籤/搜索