sql - 如何获取 JSONB 数组索引
问题描述
我确信对此有一个简单的答案,但我就是找不到。我需要获取 JSON 数组元素作为行,但它们的索引与后续处理相关。这是一个[非常简化的]示例:
id content
-- ------------------------------------------------------------------
80 {"id":"107-80", "Sections": [{"parts":5},{"parts":8},{"parts":4}]}
我需要得到:
id section section_content
-- ------- ---------------
80 0 {"parts":5}
80 1 {"parts":8}
80 2 {"parts":4}
我试过了:
select
id,
row_number() over() - 1 as section,
jsonb_array_elements(content -> 'Sections') as section_content
from purchase
但是section
列计算不正确,如下图:
id section section_content
--- -------- ---------------
80 0 {"parts":5}
80 0 {"parts":8}
80 0 {"parts":4}
解决方案
您可以使用with ordinality
select p.id, s.*
from purchase p
cross join jsonb_array_elements(p.content -> 'Sections') with ordinality as s(section_content, section)
推荐阅读
- javascript - ReactJs 上下文 - 如何用传入的状态替换当前组件状态
- java - Java 仅获得第一个值隐藏在循环中的类型
- scala - 根据不同的关键字格式在 Scala Map 中搜索键
- javascript - 使用Javascript(跨浏览器)获取DOM元素相对于页面顶部的位置
- java - Tomcat 8 IP转域名
- reactjs - babel JS 文件无法解析“@babel/runtime/helpers/builtin/classCallCheck”
- testing - 使用来自请求的动态负载测试 redux saga
- jenkins - Apache Ivy:“条件不支持嵌套的“javaversion”元素。”错误
- machine-learning - 机器学习/NLP 文本分类:从文本文件的语料库中训练模型 - scikit learn
- html - 重置css中的伪类更改