string_agg postgres functions examples example ejemplos create array_to_string array_agg array agg sql postgresql aggregate-functions

sql - postgres - Concatenar mĂșltiples filas de resultados de una columna en una, agrupar por otra columna



postgresql string_agg (3)

Estoy teniendo una mesa como esta

Movie Actor A 1 A 2 A 3 B 4

Quiero obtener el nombre de una película y todos los actores de esa película, y quiero que el resultado esté en un formato como este:

Movie ActorList A 1, 2, 3

¿Cómo puedo hacerlo?


Puede usar la función array_agg para eso:

SELECT "Movie", array_to_string(array_agg(distinct "Actor"),'','') AS Actor FROM Table1 GROUP BY "Movie";

Resultado:

| MOVIE | ACTOR | ----------------- | A | 1,2,3 | | B | 4 |

Ver este SQLFiddle

Para más, ver 9.18. Funciones agregadas


Simpler 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 la GROUP BY movie en este caso.

string_agg() espera el text tipo de datos como entrada. Es necesario emitir explícitamente otros tipos ( actor::text ), a menos que se defina una text implícita al text , que es el caso para todos los demás tipos de caracteres ( varchar , character , "char" ) y algunos otros tipos.