これは SQL で行うことができますが、いくつかのトリックが必要です。次のようにして、リスト内の文字列のn 番目の要素を抽出できます。
select reverse(substring_index(reverse(substring_index(list, ', ', n)), ',', 1))
最も内側substring_index()
は、n 番目の項目まですべてを取得します。次に、文字列を逆にして最初の項目を取得します。最後に、もう一度逆にして、もう一方の逆を元に戻します。
2 番目のトリックは、 a を実行して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
クエリ内のすべてをバッククォートしませんでした。一般に、 SQL の予約語であるcount
やのような列を使用することはお勧めできません。group