一、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