@Mr-Governor
Губернирую

Как обернуть каждый json объект в массив?

Пример: sqlfiddle.com/#!17/000c4c/1/0

Есть таблица People со след. строками:
| ID  | name  | age |
| 773 | Katya | 21  |
| 828 | Masha | 23  |
| 999 | Danya | 41  |
| 999 | Vanya | 12  |

Нужно получить записи в виде JSON объекта, где ключом объекта будет ID.
Это можно сделать так: SELECT jsonb_object_agg(ID, People) FROM People;
Результат:
{
  "773": {"ID": 773, "name": "Katya", "age": "21"},
  "828": {"ID": 773, "name": "Masha", "age": "23"},
  "999": {"ID": 773, "name": "Danya", "age": "41"}
}


Но ID в таблице могут повторятся (это важно), из-за этого остальные записи с дублирующимися ID отбрасываются.
Нужно из этой таблицы получить следующее:
{
  "773": [
    {"ID": 773, "name": "Katya", "age": "21"}
    ],
  "828": [
    {"ID": 828, "name": "Masha", "age": "23"}
    ],
  "999": [
    {"ID": 999, "name": "Danya", "age": "41"},
    {"ID": 999, "name": "Vanya", "age": "12"}
    ]
}


Как такое можно провернуть?
  • Вопрос задан
  • 179 просмотров
Решения вопроса 1
@Mr-Governor Автор вопроса
Губернирую
Пока есть такое решение:
SELECT jsonb_object_agg(my_table.ID, my_table)
FROM
(
    SELECT
        p.ID,
        (
            SELECT json_agg(pp) AS desc
            FROM People pp
            WHERE ID = p.ID
        )
    FROM People p
) AS my_table;


Более практичные решения приветсвуются.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы