Você terá que definir, como para agrupar valores que compartilham o mesmo
category_id
. Concatená-los? Calcular uma soma? Para criar listas de valores separados por vírgulas, sua instrução pode ficar assim:
SELECT category_id
,string_agg(col1, ', ') AS col1_list
,string_agg(col2, ', ') AS col2_list
FROM items
GROUP BY category_id
Você precisa do Postgres 9.0 ou posterior para
string_agg(col1, ', ')
.Nas versões mais antigas você pode substituir por array_to_string(array_agg(col1), ', ')
. Mais funções agregadas aqui
. Agregar valores no PostgreSQL é a abordagem claramente superior ao invés de agregar valores no cliente. Postgres é muito rápido nisso e reduz o tráfego (de rede).