PostgreSQL从JSONB数组中选择特定项目

时间:2019-08-23 15:46:34

标签: sql postgresql

我有一张这样的桌子:

orders

order_number   products
1234           [{"upc":2434354, "title":"Widget"}]
4321           [{"upc":6434556, "title":"Shorts"}, {"upc":54346, title: "Shirt"}]

我想生成这样的输出

[
{order_number: 1234, upc: 2434354},
{order_number: 4321, upc: 6434556}
]

如您所见,我从数组中拉出了UPC(仅针对数组中的第一个元素)。

请注意,如果products类型为jsonb

我尝试过:

SELECT jsonb_array_elements(products)[0]->>upc FROM orders ORDER BY created DESC LIMIT 10

但是它给出了一个语法错误,我不确定确切如何在PostgreSQL中进行数组遍历

此外,products可能是一个空数组[]

1 个答案:

答案 0 :(得分:4)

demo:db<>fiddle

SELECT
    jsonb_agg(
         jsonb_build_object(
             'order_number', order_number, 
             'upc', products -> 0 -> 'upc'
         )
    )
FROM
    orders
  1. products -> 0 -> 'upc'获得第一个数组元素的upc
  2. jsonb_build_object()为每个包含order_numberupc值的记录构建一个JSON对象
  3. jsonb_agg()将这些JSON对象聚合到一个JSON数组中