Mais simples com a função agregada
string_agg() (Postgres 9.0 ou posterior):SELECT movie, string_agg(actor, ', ') AS actor_list
FROM tbl
GROUP BY 1;
O
1 em GROUP BY 1 é uma referência posicional e um atalho para GROUP BY movie nesse caso. string_agg() espera o tipo de dados text como entrada. Outros tipos precisam ser convertidos explicitamente (actor::text ) - a menos que uma conversão implícita para text está definido - que é o caso de todos os outros tipos de caracteres (varchar , character , "char" ), e alguns outros tipos. Como isapir comentou, você pode adicionar um
ORDER BY cláusula na chamada agregada para obter uma lista classificada - caso você precise disso. Como:SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list
FROM tbl
GROUP BY 1; Mas normalmente é mais rápido classificar linhas em uma subconsulta. Ver:
- Postgres SQL - Criar matriz em seleção