sql group_concat语法

一、group_concat 学习

1、语法

MySQL中,Group_concat() 函数 将一个分组中的指定元素(列或表达式)的值,拼接成一个字符串返回(用逗号分隔)。

Group_concat( [要拼接在一起的字段] [order by…] [SEPARATOR separator] )
参数说明
要拼接在一起的字段
        要连接的一个或多个列/表达式
order by…
        对拼接在一起的内容进行排序
SEPARATOR
        拼接符号,默认的是 separator :逗号,
返回值说明
返回一个字符串:拼接在一起的内容;
若结果集没有任何行,此函数将返回null;
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])

注意:

group_concat只有与group by语句同时使用才能产生效果,所以使用 GROUP_CONCAT()函数必须对源数据进行分组,否则所有数据会被合并成一行

2、习题

2.1、如果有一个表如下图1,实现图2行列转换。现在的需求就是每个id为一行 在前台每行显示该id所有分数

解题:group_concat 实现如下:

SELECT id,GROUP_CONCAT(score) FROM testgroup GROUP BY id
----可以看到 根据id 分成了三行 并且分数默认用 逗号 连接

2.2、可以看到上面用GROUP_CONCAT 根据id 分成了三行 并且分数默认用 逗号 连接, 但是有每个id有重复数据,可以在GROUP_CONCAT参数重对数据去重

SELECT id,GROUP_CONCAT(DISTINCT score) FROM testgroup GROUP BY id
----GROUP_CONCAT(DISTINCT score) 实现按照id分行,id对应的score用逗号拼接,
--且用DISTINCT去重,这样拼接起来的socre是去重的

2.3 如果列转行,并且实现对每个ID(每行)对应的分值按照大小排序,可以在GROUP_CONCAT参数重对数据去重

SELECT id,GROUP_CONCAT(score ORDER BY score DESC) FROM testgroup GROUP BY id
----GROUP_CONCAT(score ORDER BY score DESC) 实现按照id分行,id对应的score用逗号拼接,
--且按照score desc 倒排

2.4 GROUP_CONCAT默认是用逗号连接,也可以设置其他分隔符

SELECT id,GROUP_CONCAT(score SEPARATOR ';') FROM testgroup GROUP BY id
----GROUP_CONCAT(score SEPARATOR ';')  separator 分割器
----这样我们的数据就根据id不同分隔符 放在了一行,前台可以根据对应的分隔符对score字段进行分割

文章参考:https://blog.csdn.net/qq_35531549/article/details/90383022

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值