【问题标题】:Postgres JSONB_ARRAY_ELEMENTS with counter or index value [duplicate]具有计数器或索引值的 Postgres JSONB_ARRAY_ELEMENTS [重复]
【发布时间】:2021-07-28 17:40:41
【问题描述】:

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

order_no widgets
50 [a,b,c]
51 [d,e,f]
select
  order_no,
  jsonb_array_elements_text(widgets) widget
from order;
order_no widget
50 a
50 b
50 c
51 d
51 e
51 f

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

order_no widget item_no
50 a 0
50 b 1
50 c 2
51 d 0
51 e 1
51 f 2

【问题讨论】:

  • 这就是WITH ORDINALITY 的用途

标签: postgresql jsonb


【解决方案1】:

在它所属的地方使用集合返回函数:在 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;

【讨论】:

    【解决方案2】:

    您正在寻找 ROW_NUMBER() 窗口函数:)

    select
      order_no,
      jsonb_array_elements_text(widgets) widget,
      row_number() over(partition by order_no order by order_no) as item_no
    from order;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 2015-03-31
      • 2021-02-21
      • 2015-10-04
      • 1970-01-01
      相关资源
      最近更新 更多