sql - 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 中绘制图表。
解决方案
您可以使用横向连接和方便的 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
推荐阅读
- python - 熊猫:选择A列不以B列开头的行
- c++ - 第一个元素为空的字符数组初始化
- javascript - 提交表单后不显示jQuery模式
- angular - 如何删除对象属性并在新变量中赋值?
- python - 在 tkinter for python 3+ 中将按钮放置在网格行的中心
- angular - 可重用的反应式表单错误验证组件不显示消息
- java - Java - MaterialDialog - 如何以编程方式在edittext上添加清除按钮
- unity3d - 物体的重力和滑动问题
- r - R glm - 如何从具有相同数据格式和值的两个不同数据集中预测相同的系数
- node.js - 使用 vue js 前端从 nodejs 后端 api 捕获错误