Подтвердить что ты не робот

PostgresQL SQL: преобразование результатов в массив

Запрос ниже:

    SELECT  i_adgroup_id, i_category_id
    FROM adgroupcategories_br
    WHERE i_adgroup_id IN
    (
        SELECT i_adgroup_id
        FROM adgroupusers_br
        WHERE i_user_id = 103713
    )
    GROUP BY i_adgroup_id, i_category_id;

Дает мне следующие результаты:

    i_adgroup_id integer | i_category_id smallint
    ---------------------|-----------------------
    15938                | 2
    15938                | 3
    15938                | 4
    15942                | 1
    15942                | 2

Я хочу, чтобы результаты были следующими:

    i_adgroup_id integer | i_category_id smallint[]
    ---------------------|-----------------------
    15938                | { 2, 3, 4 }
    15942                | { 1, 2 }

Как я могу изменить исходный SQL-запрос, чтобы дать мне результат выше?

4b9b3361

Ответ 1

Вы хотите использовать array_agg, это должно работать:

SELECT  i_adgroup_id, array_agg(i_category_id)
FROM adgroupcategories_br
WHERE i_adgroup_id IN
(
    SELECT i_adgroup_id
    FROM adgroupusers_br
    WHERE i_user_id = 103713
)
GROUP BY i_adgroup_id;

Обратите внимание, что i_category_id больше не находится в GROUP BY, поскольку он теперь агрегируется.