2011-04-19 8 views
25

La consulta siguiente:PostgreSQL SQL: La conversión de los resultados a la matriz

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; 

me da resultados como este:

i_adgroup_id integer | i_category_id smallint 
    ---------------------|----------------------- 
    15938    | 2 
    15938    | 3 
    15938    | 4 
    15942    | 1 
    15942    | 2 

Lo que yo quiero es resultados como este:

i_adgroup_id integer | i_category_id smallint[] 
    ---------------------|----------------------- 
    15938    | { 2, 3, 4 } 
    15942    | { 1, 2 } 

Cómo ¿Puedo cambiar la consulta SQL original para darme el resultado anterior?

Respuesta

39

Desea utilizar array_agg, esto debería funcionar:

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; 

Tenga en cuenta que i_category_id ya no está en la GROUP BY es lo que ahora está siendo agregada.

Cuestiones relacionadas