CONCAT
含义
将多个字符串连接成一个字符串
语法
sql
CONCAT(str1, str2,...)
数据模拟(user_score)
| id | name | score |
|---|---|---|
| 1 | 小明 | 65 |
| 2 | 小红 | 70 |
| 3 | 小兰 | 90 |
| 4 | (Null) | 100 |
| 5 | 小李 | (Null) |
SQL 代码
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)
语法
sql
CONCAT_WS(separator, str1, str2, ...)
注:separator 是分隔符
数据模拟(user_score)
| id | name | score |
|---|---|---|
| 1 | 小明 | 65 |
| 2 | 小红 | 70 |
| 3 | 小兰 | 90 |
| 4 | (Null) | 100 |
| 5 | 小李 | (Null) |
SQL 代码
sql
SELECT CONCAT_WS(null, name, score) as score
FROM user_score
结果
| score |
|---|
| (Null) |
| (Null) |
| (Null) |
| (Null) |
| (Null) |
sql
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
含义
根据某一字段分组,然后指定另一字段进行字符串拼接操作
语法
sql
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、不写分隔符默认英文逗号
sql
SELECT id, GROUP_CONCAT(score) AS score
FROM user_score GROUP BY id
| id | score |
|---|---|
| 1 | 60,60,70 |
| 2 | 65 |
| 3 | 80,85 |
sql
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
sql
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、排序
sql
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 用法