Estoy teniendo una table como esta
Movie Actor A 1 A 2 A 3 B 4
Quiero get el nombre de una película y todos los actores de esa película, y quiero que el resultado esté en un formatting como este:
Movie ActorList A 1, 2, 3
¿Cómo puedo hacerlo?
Simpler con la function 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 reference posicional y un atajo para la GROUP BY movie
en este caso.
string_agg()
espera el text
tipo de datos como input. Otros types deben emitirse de forma explícita ( actor::text
), a less que se defina una text
implícita al text
, que es el caso para todos los demás types de caracteres ( varchar
, character
, "char"
) y algunos otros types.
Puede usar la function 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 |
Para más, ver 9.18. Funciones agregadas
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