首页 > 解决方案 > sql如何将多选字段转换为总计行

问题描述

我有一个表,其中有一个字段,其中内容是来自多选表单的选择的串联列表。我想将此字段中的数据转换为另一个表,其中每一行都有选择的文本,并计算此选择的次数。例如。

原表:

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)目标是使用第二个表在 Google Data Studio 中绘制图表。

标签: sqlpostgresqlcsvcountlateral-join

解决方案


您可以使用横向连接和方便的 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

推荐阅读