2011-04-19 74 views
25

下面的查询: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查询来给我上面的结果吗?

回答

39

你想用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_idGROUP BY不再像现在正在聚集。