json - 获取 JSONB 属性的计数
问题描述
我有 jsonb 列answers
,它可能看起来像这样,有 3 行:
{answer1: {label: "", value: "answer1_value1"}, answer2: {label: "", value: "answer2_value1"}}
{answer1: {label: "", value: "answer1_value2"}, answer2: {label: "", value: "answer2_value1"}}
{answer1: {label: "", value: "answer1_value2"}, answer2: {label: "", value: "answer2_value2"}}
一组行的答案属性名称可以不同。我想从上面的示例中得到这个结果(按值分组的每个答案的计数):
answer1: { answer1_value1: 1, answer1_value2: 2}
answer2: { answer2_value1: 2, answer2_value2: 1}
是否可以?
我得到了这样的字段名称SELECT DISTINCT json_object_keys(answers::json) as field
,但不知道下一步该怎么做。
解决方案
用于jsonb_each()
计算答案并将结果聚合回 json 对象:
select jsonb_build_object(key, jsonb_object_agg(val, count))
from (
select key, value->>'value' as val, count(*)
from my_table
cross join jsonb_each(answers)
group by key, val
) s
group by key;
推荐阅读
- reactjs - Mapbox-GL-JS + REACT:链接单选按钮以切换地图的图层
- c# - 端口不关闭
- php - 使用存储库模式时已在使用接口名称
- javascript - 每天发送邮件
- c# - 如何在文本框中显示由多个连接组成的数据库选择?
- javascript - 如何在点击时删除多个播放列表项?
- python - 对python字节文字感到困惑
- amazon-web-services - Athena 对布尔列没有显示任何值,使用胶水爬虫创建的表
- salesforce - 每 x 天重复 Salesforce Workflow 操作
- javascript - googleapis npm 模块和 webpack 包错误