PostgresQL SQL:将结果转换为数组

Dot*_*ion 34 sql arrays postgresql

查询如下:

    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;
Run Code Online (Sandbox Code Playgroud)

给我这样的结果:

    i_adgroup_id integer | i_category_id smallint
    ---------------------|-----------------------
    15938                | 2
    15938                | 3
    15938                | 4
    15942                | 1
    15942                | 2
Run Code Online (Sandbox Code Playgroud)

我想要的是这样的结果:

    i_adgroup_id integer | i_category_id smallint[]
    ---------------------|-----------------------
    15938                | { 2, 3, 4 }
    15942                | { 1, 2 }
Run Code Online (Sandbox Code Playgroud)

如何更改原始SQL查询以获得上述结果?

mu *_*ort 53

你想使用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;
Run Code Online (Sandbox Code Playgroud)

请注意,i_category_id现在不再GROUP BY像现在这样聚合.