web-dev-qa-db-ja.com

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クエリを変更して上記の結果を得るにはどうすればよいですか?

34

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には含まれていません。

54
mu is too short