1. 程式人生 > >Mysql concat、CONCAT_WS、group_concat使用者及結合使用(group by)

Mysql concat、CONCAT_WS、group_concat使用者及結合使用(group by)

CONCAT字串連線函式

1.concat_ws 函式

語法: CONCAT(str1,str2,…) 
返回結果為連線引數產生的字串。如有任何一個引數為NULL ,則返回值為 NULL。

2.concat_ws 函式 (CONCAT()的特殊形式

語法: CONCAT_WS(separator,str1,str2,...)
CONCAT_WS() 代表 CONCAT With Separator,第一個引數是其它引數的分隔符 。

CONCAT_WS使用場景:查詢某個考試中成績為100的使用者的id和name,並將id和name使用'||'分隔

eg:

SELECT 
	thh.score, 
	CONCAT_WS('||',thh.USER_ID, thh.USER_NAME)  maxUser
FROM   exam_history thh
WHERE thh.score=100
AND thh.exam_id='297e27e25d1c08d2015d1c10994d00d0'


3.group_concat 函式

語法:group_concat([DISTINCT] 要連線的欄位 [Order BY ASC/DESC 排序欄位] [Separator '分隔符'])

group_concat 使用場景:以id分組,將id相同的name值都列印在一行

eg:(此為w3c中的例子)

mysql> select id,group_concat(name) from aa group by id;
+------+--------------------+
| id| group_concat(name) |
+------+--------------------+
|1 | 10,20,20|
|2 | 20 |
|3 | 200,500|
+------+--------------------+
3 rows in set (0.00 sec)

CONCAT_WS、group_concat 聯合使用場景:以考試分組,查詢每個考試下的所有最高分使用者的id和name,並將使用者id和name用"||"分隔,使用者之間用","分隔

eg:

SELECT 
	thh.exam_id as examId,
	thh.score, 
	GROUP_CONCAT(CONCAT_WS('||',thh.USER_ID, thh.USER_NAME))  maxUsers
FROM   exam_history thh
WHERE thh.score=100
GROUP BY thh.exam_id