【MySQL】CONCAT、CONCAT_WS、GROUP_CONCAT 函数用法
CONCAT
含义
将多个字符串连接成一个字符串
语法
CONCAT(str1, str2,...)
数据模拟(user_score)
id | name | score |
---|---|---|
1 | 小明 | 65 |
2 | 小红 | 70 |
3 | 小兰 | 90 |
4 | (Null) | 100 |
5 | 小李 | (Null) |
SQL 代码
SELECT CONCAT(name, ',', score) AS score
FROM user_score
结果
score |
---|
小明,65 |
小红,70 |
小兰,90 |
(Null) |
(Null) |
结论
返回结果为连接参数产生的字符串,如果有任何一个参数为 null
,则返回值为 null
CONCAT_WS
含义
和 CONCAT()
一样,将多个字符串连接成一个字符串,但是可以一次性指定分隔符~(CONCAT_WS
就是 concat with separator
)
语法
CONCAT_WS(separator, str1, str2, ...)
注:separator 是分隔符
数据模拟(user_score)
id | name | score |
---|---|---|
1 | 小明 | 65 |
2 | 小红 | 70 |
3 | 小兰 | 90 |
4 | (Null) | 100 |
5 | 小李 | (Null) |
SQL 代码
SELECT CONCAT_WS(null, name, score) as score
FROM user_score
结果
score |
---|
(Null) |
(Null) |
(Null) |
(Null) |
(Null) |
SELECT CONCAT_WS(',', name, score) as score
FROM user_score
结果
score |
---|
小明,65 |
小红,70 |
小兰,90 |
100 |
小李 |
结论
1、分隔符为 null
时,结果全部也变成 null
2、和 CONCAT
的区别在于,CONCAT_WS
取的字段为 null
不会导致结果直接为 null
,而 CONCAT
是直接结果为 null
GROUP_CONCAT
含义
根据某一字段分组,然后指定另一字段进行字符串拼接操作
语法
GROUP_CONCAT([DISTINCT] 要连接的字段 [ORDER BY 排序字段 ASC/DESC] [Separator '分隔符'])
数据模拟(user_score)
id | score |
---|---|
1 | 60 |
1 | 60 |
1 | 70 |
2 | 65 |
3 | 85 |
3 | 80 |
3 | (Null) |
SQL 代码
1、不写分隔符默认英文逗号
SELECT id, GROUP_CONCAT(score) AS score
FROM user_score GROUP BY id
id | score |
---|---|
1 | 60,60,70 |
2 | 65 |
3 | 80,85 |
SELECT id, GROUP_CONCAT(score Separator ‘-’) AS score
FROM user_score GROUP BY id
id | score |
---|---|
1 | 60-60-70 |
2 | 65 |
3 | 80-85 |
2、使用 DISTINCT
SELECT id, GROUP_CONCAT(DISTINCT score) AS score
FROM user_score GROUP BY id
id | score |
---|---|
1 | 60,70 |
2 | 65 |
3 | 80,85 |
3、排序
SELECT id, GROUP_CONCAT(DISTINCT score ORDER BY score DESC) AS score
FROM user_score GROUP BY id
id | score |
---|---|
1 | 70,60 |
2 | 65 |
3 | 85,80 |
参考
MySQL group_concat() 函数
MySQL 教程之 concat 以及 group_concat 的用法
SQL 函数 Group_concat 用法