Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql如何将多选字段转换为包含总计的行_Sql_Postgresql_Csv_Count_Lateral Join - Fatal编程技术网

sql如何将多选字段转换为包含总计的行

sql如何将多选字段转换为包含总计的行,sql,postgresql,csv,count,lateral-join,Sql,Postgresql,Csv,Count,Lateral Join,我有一个表,它有一个字段,其中的内容是从多选择表单中选择的串联列表。我想将此字段中的数据转换为另一个表中的数据,在该表中,每行都有选择的文本,并计算进行此选择的次数。 例如 原始表格: id selections 1 A;B 2 B;D 3 A;B;D 4 C 我想了解以下信息: selection count A 2 B 3 C 1 D 2 我可以很容易地用javasc

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

原始表格:

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中的split和maps等实现这一点,但不知道如何在SQL中实现这一点。(我使用Postgresql)目标是使用第二个表在Google Data Studio中绘制图形。

您可以使用横向连接和方便的设置返回函数
regexp\u split\u to\u 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\u split\u to_table(选项“;”),count(*)
从测试表
按1分组
1号订单;

great-我也会试试这个答案也很好,不需要横向连接。谢谢@ndogac!