Mysql行鏈接,列鏈接

關係型數據庫在應用時,有時想把結果進行一些鏈接,包括行鏈接,列鏈接等有時都會用到。本文介紹幾個經常使用的mysql鏈接函數。在此基礎上,能夠實現較豐富的mysql查詢。mysql

concat

關係數據庫查詢時有時但願把查詢結果進行鏈接,常使用concat實現。sql

concat(String,String...)

concat函數支持將多個string參數鏈接成一個string。如:數據庫

|field1|field2|
|  tv1  | tv2   |
|  tv3  | tv4   |
select concat(filed1,field2) ftom tb;

將返回:函數

|tv1tv2|
|tv3tv4|

不一樣類型的filed會有對應的轉碼方式。MySQL的concat函數在鏈接字符串的時候,只要其中一個是NULL,那麼將返回NULL。code

concat_ws

concat函數在鏈接字符串時沒有指定鏈接符的功能。concat_ws是concat with separator的意思。該函數功能和concat相似,只是在鏈接時能夠指定separator。排序

concat_ws(separator,string,string...)
select concat_ws(',',field1,field2) from tb;

將獲得字符串

|tv1,tv2|
|tv3,tv4|

concat_ws不會忽略空值,但會忽略Null。string

group_concat

前面兩個concat函數都是在不一樣的列上進行鏈接,或鏈接字符串,有時想把某一列的全部值鏈接起來。這時就要用到group_concat函數。it

group_concat其實是一個聚合函數,能夠實現把一列的值聚合到一塊兒,聚合的方法不一樣於count,sum等計數函數,而是concat。基礎

GROUP_CONCAT([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [SEPARATOR str_val])

最簡單的使用:

select group_concat(field1) from tb;
|tv1,tv3|

把field1這一列的全部值拿出來鏈接在一塊兒組成一個字符串返回。

由於是聚合函數,因此和group組合起來使用,將在組內對列進行鏈接。同時,也能夠傳多個field進去,此時把每一行的多列鏈接起來組成一個列,再對列進行鏈接。默認狀況下列內鏈接符號是',',也能夠在參數中指定separator。

鏈接過程當中還能夠指定組內排序。如:

select group_concat(field1 order by field1 desc SEPARATOR '-');

將獲得

|tv3-tv1|

wm_concat

除了在mysql中使用相似的函數以外,在hive中也有cancat,group_concat函數,使用方法相似,在odps中也有wm_concat具有和group_concat相似的功能。

相關文章
相關標籤/搜索