首页 > 解决方案 > 具有计数器或索引值的 Postgres JSONB_ARRAY_ELEMENTS

问题描述

假设我有这个order表,其中widgets列是一个jsonb数组:

订单号 小部件
50 [a,b,c]
51 [d,e,f]
select
  order_no,
  jsonb_array_elements_text(widgets) widget
from order;
订单号 小部件
50 一个
50 b
50 C
51 d
51 e
51 F

有没有办法让查询包含记录中每个 jsonb 数组元素的增量/计数器order?(该示例是从零开始的,但使用从 1 开始的查找...)

订单号 小部件 编号
50 一个 0
50 b 1
50 C 2
51 d 0
51 e 1
51 F 2

标签: postgresqljsonb

解决方案


在它所属的地方使用集合返回函数:在 FROM 子句中。然后您可以使用以下with ordinality选项:

select o.order_no,
       w.*
from "order" o
  cross join jsonb_array_elements_text(widgets) with ordinality as w(widget, idx)
order by o.order_no, w.idx;

推荐阅读