sql 如何将多个 select 字段转换为带总计的行

sql how to convert multi select field to rows with totals

我有一个 table,它有一个字段,其中的内容是来自多 select 形式的 select 离子的串联列表。我想将此字段中的数据转换为另一个 table 中的数据,其中每一行都有 selection 的文本并计算此 selection 的创建次数。 例如

原文table:

id    selections
1     A;B
2     B;D
3     A;B;D
4     C

我想得到以下内容:

selection   count
A           2
B           3
C           1
D           2

我可以在 javascript 等中使用拆分和映射轻松地做到这一点,但不确定如何在 SQL 中处理它。 (我使用 Postgresql)目标是使用第二个 table 在 Google Data Studio 中绘制图表。

您可以使用横向连接和方便的 set-returning 函数 regexp_split_to_table() 将字符串取消嵌套到行,然后聚合和计数:

select x.selection, count(*) cnt
from mytable t
cross join lateral regexp_split_to_table(t.selections, ';') x(selection)
group by x.selection

更简单的解决方案:

select regexp_split_to_table(selections, ';'), count(*)
from test_table
group by 1
order by 1;