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