volkov_p_v
@volkov_p_v
FrontEnd разработчик

Как сформировать выборку уникальных объектов в массив?

В таблице есть уникальный id, есть id пользователя , доп значение type и значение от 1 до 6, которое он выбрал.
id | id_user | type | data
----+-----------+-------
1 | 1456 | action | 6
2 | 5812 | usual | 2
3 | 1456 | present | 1
4 | 1456 | present | 1
5 | 5812 | usual |2
6 | 7774 | present | 1

Мне надо сделать выборку так, что бы получилось id пользователя и массив с уникальными объектами, т.е. без дублированных записей.
На выходе должно получиться:

[
    {
        id_user: 1456,
        data: [
                  {data: 6, type: action}, 
                  {data: 1, type: present}
                 ],
    },
    {
        id_user: 5812,
        data: [
                  {data:2, type: usual}
                 ]
    },
    {
        id_user: 7774,
        data: [
                 {data:1, type: present}
                 ]
    }
]


Как должен выглядеть запрос для данного решения?
Заранее спасибо!
  • Вопрос задан
  • 296 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
select json_agg(json_build_object('id_user', id_user, 'data', d)) from (
    select id_user, json_agg(json_build_object('data', val, 'type', type)) as d from (
        select id_user, type, val from tt group by id_user, type, val
    ) t group by id_user
) s;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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