Mysql来帮忙:多行合并成一列
Posted 沛沛老爹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql来帮忙:多行合并成一列相关的知识,希望对你有一定的参考价值。
先还是来说下业务场景
现在有个业务需求,需要根据父类ID(pid),分别找出3条最新的数据展示出来。
如果使用group by发现每个只能显示一条。
那么怎么办?
接下来就是解决现场。
解决
解决思路
1、把符合条件的id串在一起组合成一个新的列
2、从列里面截取3个子项
整体SQL
先直接上方案-SQL:
SELECT pid,
SUBSTRING_INDEX(
GROUP_CONCAT(id)
,','
,-3) as ids
FROM t_info where 1=1 GROUP BY pid
把符合条件的id串在一起组合成一个新的列
解决方案:GROUP_CONCAT
语法
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
[] 中都是可选择的。例如分隔符,如果不填的话,默认使用逗号分割。
这个函数的目的,是为了把所有符合group by 结果的行,相关的列组合成一行的一个列,使用逗号把它们串在一起。
例如执行下面这个的结果就是把id串在一起。
SELECT pid,GROUP_CONCAT(id) ) as ids
FROM t_info where 1=1 GROUP BY pid
通过上面的这个函数,我们解决了把所有符合的列串在一起的功能了。
从列里面截取3个子项
接下来是怎么实现只取后面3个了。
这里一般都是使用截取的功能。
substring_index是个比较好的函数。使用复数是把匹配的从后面开始计算。因为需求要的是最新的,根据默认排序规则asc。所以最新的在最后面,就使用复数的方式来计算了。
具体substring_index大家可以看下作者其它的文章
以上是关于Mysql来帮忙:多行合并成一列的主要内容,如果未能解决你的问题,请参考以下文章
mysql 行变列(多行变成一行/多行合并成一行/多行合并成多列/合并行)