PostgresQL SQL: преобразование результатов в массив - PullRequest
33 голосов
/ 20 апреля 2011

Запрос ниже:

    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, чтобы получить результат, приведенный выше?

1 Ответ

51 голосов
/ 20 апреля 2011

Вы хотите использовать 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, так как он сейчас агрегируется.

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