sql - postgres - Concatenar mĂșltiples filas de resultados de una columna en una, agrupar por otra columna
postgresql string_agg (3)
Esta pregunta ya tiene una respuesta aquí:
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.
select movie,GROUP_CONCAT(DISTINCT Actor) as ActorList from toyr_table group by movie
puedes leerlo aquí http://www.w3resource.com/mysql/aggregate-functions-and-grouping/aggregate-functions-and-grouping-group_concat.php