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

相关推荐
91刘仁德4 小时前
MYSQL 事务原理及使用
android·mysql·adb
wxwx_bscxy3224 小时前
NodeJS 高校学业预警系统10551
mysql·node.js·vue·高校学业预警
寺中人9 小时前
MySQL 8.0 Windows 完整安装教程:环境配置、密码重置与常见报错排查
数据库·windows·mysql·环境搭建·mysql 安装
这个DBA有点耶9 小时前
MySQL 8.0执行计划分析利器:EXPLAIN ANALYZE到底比EXPLAIN强在哪?
数据库·mysql·代码规范
数据库小学妹12 小时前
MySQL长事务复盘:Sleep连接、MDL排队与undo滞留
运维·数据库·mysql
计算机毕设定制辅导-无忧学长13 小时前
基于Spring Boot的玄幻小说个性化推荐平台设计与实现
java·vue.js·spring boot·后端·mysql·推荐算法
棣廷14 小时前
初识MySQL——DQL数据查询语言详解
数据库·mysql
ttwuai16 小时前
Go 后台初始化 MySQL 脚本失败怎么办?先查 DDL 还是生成配置
开发语言·mysql·golang
Y3815326621 天前
MySQL 慢查询排查实战:EXPLAIN 看懂 type 与 Extra,一个字段定位性能问题
数据库·mysql
数据库小学妹1 天前
为什么MySQL索引用B+树?从存储底层讲透原理
数据库·mysql·b+树·索引优化·磁盘io·数据库原理