Как в PostgreSql сделать запрос с двойной вложенностью json в результате?

В PostgreSQL можно использовать функцию jsonb_agg и subquery для создания запроса с двойной вложенностью JSON.

Допустим, у нас есть таблица "users" с колонками "id", "name" и "pets". Каждая запись в "pets" имеет следующую структуру JSON:

{
"pet_name": "Charlie",
"pet_type": "Dog"
}

Для создания запроса с двойной вложенностью JSON, мы можем использовать следующий код:

SELECT
users.id,
users.name,
jsonb_agg(pets.pet) as pets
FROM
users
JOIN
(SELECT
user_id,
jsonb_build_object('pet_name', pet_name, 'pet_type', pet_type) as pet
FROM
pets) AS pets
ON
pets.user_id = users.id
GROUP BY
users.id,
users.name;

Первый шаг - мы делаем подзапрос (subquery), который создает JSON-объект для каждой записи в таблице "pets", используя функцию jsonb_build_object. Затем мы объединяем результаты этого подзапроса с таблицей "users" по полю "user_id".

Затем мы используем функцию jsonb_agg для объединения всех созданных JSON-объектов в массив. Поле этого массива мы называем "pets".

Наконец, мы группируем результаты по идентификатору пользователя (users.id) и имени пользователя (users.name), чтобы получить конечный результат.

Таким образом, в результате выполнения этого запроса вы получите таблицу, где в поле "pets" будет массив JSON-объектов с информацией о питомцах каждого пользователя.