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

假设我有这个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

【问题讨论】:

    标签: postgresql jsonb


    【解决方案1】:

    您可以将函数调用移至 FROM,然后添加 WITH ORDINALITY。它是基于 1 的,而不是基于 0 的,所以你必须减去 1。

    select order_no, value as widget, ordinality-1 as item_no
    from "order", jsonb_array_elements_text(widgets) with ordinality;
    

    您不应该使用“order”作为表名,因为它是一个保留字。您可以通过将其放在引号中来做到这一点,但这仍然是一个坏主意。

    【讨论】:

    • 感谢并很好地调用表名——这是一个人为的例子,只是为了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 2020-12-24
    • 2012-10-12
    相关资源
    最近更新 更多