2011-04-19 44 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不再像現在正在聚集。