我有一张这样的桌子:
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
可能是一个空数组[]
答案 0 :(得分:4)
SELECT
jsonb_agg(
jsonb_build_object(
'order_number', order_number,
'upc', products -> 0 -> 'upc'
)
)
FROM
orders
products -> 0 -> 'upc'
获得第一个数组元素的upc
值jsonb_build_object()
为每个包含order_number
和upc
值的记录构建一个JSON对象jsonb_agg()
将这些JSON对象聚合到一个JSON数组中