Как объединить два столбца postgres в одно значение (объект json)

Я пытаюсь написать запрос к моей таблице еда.список:

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 слишком рано... или, может быть, мне нужно снова развернуть их после?

Любая помощь будет потрясающей, спасибо :)

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте json_object_agg

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

ДЕМО

Другие вопросы по теме