1、CONCAT()函數git
concat() 函數用於將多個字符串鏈接成一個字符串。函數
一、語法及使用特色:spa
CONCAT(str1,str2,…) 返回結果爲鏈接參數產生的字符串。若有任何一個參數爲NULL ,則返回值爲 NULL。能夠有一個或多個參數。
二、使用示例:code
使用函數concat_ws().blog
語法爲: concat_ws(separator,str1,str2,......)字符串
concat_ws() 表明concat with separator, 是 concat()的特殊形式,第一個參數是分隔符。分隔符的位置放在要鏈接的兩個字符串之間。分隔符能夠是一個字符串,也能夠是其它參數。若是分隔符爲 NULL,則結果爲 NULL。函數會忽略任何分隔符參數後的 NULL 值。可是CONCAT_WS()不會忽略任何空字符串。 (然而會忽略全部的 NULL)。it
如SELECT CONCAT_WS('_',id,name) AS con_ws FROM info LIMIT 1;返回結果爲
+----------+
| con_ws |
+----------+
| 1_BioCyc |
+----------+
SELECT CONCAT_WS(',','First name',NULL,'Last Name');返回結果爲
| CONCAT_WS(',','First name',NULL,'Last Name') |io
前言:在有group by的查詢語句中,select指定的字段要麼就包含在group by語句的後面,做爲分組的依據,要麼就包含在聚合函數中。ast
例5:查詢該數據並根據性別分組:test
select sex, id, username from my_test group by sex;
根據性別分組以後,想知道每一個分組裏面都有哪些數據,那怎麼辦啊? ——使用group_concat()
例6:查詢數據分組並獲取每一個組別中詳細的數據:
三、使用SUBSTRING_INDEX和CROSS JOIN將列裏面的的數字都拆分出來,把一行變成一列。
方法一(網上查詢的方法):
建配置表:
CREATE TABLE digits (digit INT(1)); INSERT INTO digits VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9); CREATE TABLE sequence (seq INT(3)); INSERT INTO sequence ( SELECT D1.digit + D2.digit * 10 FROM digits D1 CROSS JOIN digits D2 );
配置表sequence的結果爲0-99的一列數字:
SQL:
SELECT SUBSTRING_INDEX( SUBSTRING_INDEX(JoinEventIds, ',', seq), ',' ,- 1 ) JoinEventIds FROM sequence CROSS JOIN user WHERE seq BETWEEN 1 AND ( SELECT 1 + LENGTH(JoinEventIds) - LENGTH( REPLACE (JoinEventIds, ',', '') ) )
方法二(本身不想建表,圖省事):將sequence替換爲SELECT @rownum:=@rownum+1 AS seq FROM (SELECT @rownum:=0) r, user LIMIT 0,100) ,user爲表名,這張表須要大於100條。
SELECT SUBSTRING_INDEX( SUBSTRING_INDEX(JoinEventIds, ',', seq), ',' ,- 1 ) JoinEventIds FROM (SELECT @rownum:=@rownum+1 AS seq FROM (SELECT @rownum:=0) r, user LIMIT 0,100) b CROSS JOIN user WHERE seq BETWEEN 1 AND ( SELECT 1 + LENGTH(JoinEventIds) - LENGTH(REPLACE(JoinEventIds, ',', '')))
兩種方法結果均爲: