我有一张这样的表:
GROUP COUNT tag1, tag2 23 tag1, tag2, tag3 12 tag2, tag3 10
我想创建一个这样的表:
TAG COUNT tag1 35 tag2 45 tag3 22
基本上,我想在第一个表中拆分字符串,然后计算出现的数,然后插入到新表中。我发现在MySQL中拆分字符串越来越困难。我不介意把结果带到我的PHP并在那里使用它,但是这个表是32000行,由于某种原因,我的PHP进程进入了一个无限期的SLEEP模式。
因此,非常感谢任何关于如何使用纯SQL命令实现此目的的指针。
答案 0 :(得分:4)
您可以在SQL中执行此操作,但它需要一些技巧。您可以通过执行以下操作提取列表中字符串的 nth 元素:
select reverse(substring_index(reverse(substring_index(list, ', ', n)), ',', 1))
最里面的substring_index()
检索到第n个项目的所有内容。然后反转字符串并获取第一个项目。最后,再次反转它以撤消另一个反向。
第二个技巧是做一个cross join
来引入一个数字列表。您的列表最多包含3个元素,因此列表中最多需要3个元素。示例查询通过使用union all
将数字组合在一起来完成此操作;你可能有某种数字表。
最后一步是汇总数据并总结:
select tag, SUM(count)
from (select reverse(substring_index(reverse(substring_index(group, ', ', n.n)), ',', 1)) as tag, count
from t cross join
(select 1 as n union all select 2 union all select 3
) n
where n.n <= 1+(length(GROUP) - length(replace(group, ',', '')))
) t
group by tag
我没有反驳查询中的所有内容。通常,对于count
或group
之类的列来说,这是SQL中的保留字。