首先创建表
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