您可以在 SQL 中执行此操作,但这需要一些技巧。您可以通过执行以下操作提取列表中字符串的第 n 个元素:
select reverse(substring_index(reverse(substring_index(list, ', ', n)), ',', 1))
最内层substring_index()
检索直到第 n 个项目的所有内容。然后反转字符串并获得第一项。最后,再次反转它以撤消另一个反转。
第二个技巧是做 across 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
通常,在 SQL 中使用类似或group
保留字的列是不好的做法。