首页 > 解决方案 > 如何将两个 postgres 列组合为单个值(json 对象)

问题描述

我正在尝试在我的food.list表上写一个查询:

categories    | items
----------------------------
dairy         | ["milk", "cheese"]
fruit         | ["apples", "pears", "grapes"]
vegetables    | ["carrots"]  

并返回一个带有单行的selected_foods列。我希望该行的值是一个具有类别(键)列表和项目(值)数组的对象。

selected_foods
------------------------------------
{ 
  dairy: ["milk", "cheese"], 
  fruit: ["apples", "pears", "grapes"], 
  vegetables: ["carrots"] 
}

到目前为止,我已经尝试过:

SELECT json_agg(json_build_object(categories, items::json))::json 
AS selected_foods
FROM food.list

但这会返回一个对象数组,即:

selected_foods
------------------------------------
[ 
  { dairy: ["milk", "cheese"] }, 
  { fruit: ["apples", "pears", "grapes"] }, 
  { vegetables: ["carrots"] }
]

我想我太早地应用了json_build_object函数......或者我可能需要在之后再次打开它们?

任何帮助都会很棒,谢谢:)

标签: sqlarraysjsonpostgresql

解决方案


利用json_object_agg

SELECT json_object_agg( categories, items::json)  as selected_foods
     from list 

演示


推荐阅读