Объединенные записи как массив JSON в Postgres - PullRequest
0 голосов
/ 01 мая 2018

Я хотел бы вернуть записи в таблице, к которой я присоединяюсь, как массив jsons внутри одного поля.

У меня есть рабочее решение, но есть нежелательное f1 вместо него.

Текущий запрос:

select 
    grouped_by_table.json_array as my_col
from profiles
left join (
    select 
        p.profile_id,
        array_to_json(array_agg(row(p))) as json_array
    from (select * from positions) p
    group by profile_id
) as grouped_by_table on grouped_by_table.profile_id::int = profiles.id

Текущий результат: (Это данные в столбце my_col для одной записи)

[{
    "f1": {
        "id": 153,
        "start_year": 2014,
        "end_year": 2016,
        "profile_id": "100"
    }
}, {
    "f1": {
        "id": 151,
        "start_year": 2016,
        "end_year": null,
        "profile_id": "100"
    }
}]

Желаемый результат: (я бы хотел удалить слой f1)

[{
    "id": 153,
    "start_year": 2014,
    "end_year": 2016,
    "profile_id": "100"
}, {
    "id": 151,
    "start_year": 2016,
    "end_year": null,
    "profile_id": "100"
}]

Спасибо, любезно.

1 Ответ

0 голосов
/ 01 мая 2018

Используйте json_agg вместо array_agg:

select  profile_id
,       json_agg(p)
from    positions p
group by
        profile_id

Пример на скрипте SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...