【MySQL】CONCAT、CONCAT_WS、GROUP_CONCAT 函数用法

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 用法

相关推荐
卡西里弗斯奥4 小时前
【达梦数据库】dblink连接[SqlServer/Mysql]报错处理
数据库·mysql·sqlserver·达梦
杨俊杰-YJ5 小时前
MySQL 主从复制原理及其工作过程
数据库·mysql
一个儒雅随和的男子6 小时前
MySQL的聚簇索引与非聚簇索引
数据库·mysql
独泪了无痕7 小时前
MySQL查询优化-distinct
后端·mysql·性能优化
hadage2338 小时前
--- Mysql事务 ---
数据库·mysql
天天向上vir9 小时前
缓存三大问题及其解决方案
java·redis·mysql
初尘屿风10 小时前
vue3项目,旅游景点页面
java·javascript·vue.js·spring boot·后端·mysql·ecmascript
Cikiss11 小时前
图解MySQL【日志】——Buffer Pool
java·数据库·后端·mysql
又逢乱世12 小时前
Node.js 连接 mysql 数据库
数据库·mysql·node.js
君败红颜12 小时前
MySQL 使用 Performance Schema 定位和解决慢 SQL 问题
数据库·sql·mysql