MySQL一列分多列 (用特殊符号分列,符号出现不限次数)

首先创建表

CREATE TABLE `testtag` (
  `postid` int(11) NOT NULL AUTO_INCREMENT,
  `likes` int(100) DEFAULT NULL,
  `replay` int(100) DEFAULT NULL,
  `share` int(100) DEFAULT NULL,
  `tagid` varchar(220) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`postid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='社区发帖表'



插入数据

insert into testtag values(postid,10,3,5,'2=养生,3=职场');
insert into testtag values(postid,3,5,2,'1=爱情,3=职场,4=玄幻');
insert into testtag values(postid,28,17,5,'4=玄幻,5=搞笑');



结果




参考大佬博文《mysql如何进行以,分割的字符串的拆分》
利用MySQL的内置表help_topic作为辅助表,我的是MySQL8的版本,help_topic_id最大值为684在这里插入图片描述
数据量不多,满足需求。

首先将数据根据“,”进行划分


SELECT distinct(substring_index(
	substring_index(t.tag,',', b.help_topic_id + 1), ',', -1)) tagtemp
FROM test.testtag t 
join mysql.help_topic b 
ON b.help_topic_id <  (
	LENGTH(t.tag) - LENGTH(REPLACE(t.tag, ',', '')) + 1) 
order by tagtemp

得到结果
在这里插入图片描述
要求根据标签计算各个喜欢,点赞数据量


将标签提取出来并加入聚合函数计算总量

select substring_index(temp.tagtemp, '=', 1) tagid,substring_index(temp.tagtemp, '=', -1) tagcontent,count(postid),sum(temp.likes),sum(temp.replay),sum(temp.share)
 FROM 
	(
		SELECT t.postid,t.likes,t.replay,t.share,
		substring_index(substring_index(t.tag,',', b.help_topic_id + 1), ',', -1) tagtemp 
		FROM test.testtag t 
		join mysql.help_topic b ON b.help_topic_id <  (LENGTH(t.tag) - LENGTH(REPLACE(t.tag, ',', '')) + 1) 
	) temp
 group by tagid order by tagid 

得到结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值