您可以在SQL中执行此操作,但它需要一些技巧.您可以通过执行以下操作来提取列表中字符串的第n个元素:
select reverse(substring_index(reverse(substring_index(list, ', ', n)), ',', 1))
最里面的substring_index()检索到第n个项目的所有内容.然后反转字符串并获取第一个项目.最后,再次反转以撤消另一个反向.
第二个技巧是进行交叉连接以引入数字列表.您的列表最多包含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
我没有反驳查询中的所有内容.通常,在SQL中使用像count或group这样的保留字的列是不好的做法.