Pregunta Concatenar múltiples filas de resultados de una columna en una, agrupar por otra columna [duplicar]


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?


74
2018-04-06 05:00


origen


Respuestas:


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;

los 1 en GROUP BY 1 es una referencia posicional y un atajo para GROUP BY movie en este caso.

string_agg() espera tipo de datos text como entrada. Otros tipos deben ser emitidos explícitamente (actor::text) a no ser que un molde implícito para text está definido, que es el caso para todos los demás tipos de caracteres (varchar, character, "char") y algunos otros tipos.


124
2018-04-06 11:44



Puedes usar array_agg función 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


29
2018-04-06 05:10



 select movie,GROUP_CONCAT(DISTINCT Actor) as ActorList from toyr_table group by movie 

Puede leerlo aquí http://www.w3resource.com/mysql/aggregate-functions-and-grouping/aggregate-functions-and-grouping-group_concat.php


-4
2018-04-06 05:10