Más simple con la función agregada string_agg() (Postgres 9.0 o posterior):
SELECT movie, string_agg(actor, ', ') AS actor_list
FROM tbl
GROUP BY 1;
El 1 en GROUP BY 1 es una referencia posicional y un atajo para GROUP BY movie en este caso.
string_agg() espera el tipo de datos text como entrada Otros tipos deben emitirse explícitamente (actor::text ) - a menos que una conversión implícita a text está definido, que es el caso para todos los demás tipos de caracteres (varchar , character , "char" ), y algunos otros tipos.
Como comentó isapir, puede agregar un ORDER BY cláusula en la llamada agregada para obtener una lista ordenada, en caso de que la necesite. Me gusta:
SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list
FROM tbl
GROUP BY 1; Pero normalmente es más rápido ordenar filas en una subconsulta. Ver:
- Postgres SQL - Crear matriz en Seleccionar