La función GROUP_CONCAT
en MySQL es una función de agregación que permite concatenar valores de una columna en una sola cadena de texto, separando cada valor por una coma (u otro delimitador si se especifica). Es muy útil cuando necesitas combinar valores de una columna agrupados por otra, especialmente en consultas donde utilizas GROUP BY
.
GROUP_CONCAT
GROUP_CONCAT(expresion [ORDER BY campo] [SEPARATOR 'delimitador'])
,
pero puedes especificar cualquier otro.
Supongamos que tienes una tabla llamada alumnos
con los siguientes datos:
curso_id | nombre |
---|---|
1 | Ana |
1 | Juan |
2 | Luis |
2 | Marta |
2 | Sofia |
Para obtener una lista de nombres de alumnos agrupados por curso, puedes utilizar GROUP_CONCAT
junto con GROUP BY
:
SELECT curso_id, GROUP_CONCAT(nombre) AS alumnos
FROM alumnos
GROUP BY curso_id;
Resultado:
curso_id | alumnos |
---|---|
1 | Ana,Juan |
2 | Luis,Marta,Sofia |
ORDER BY
dentro de GROUP_CONCAT
Si quieres que los nombres de cada grupo aparezcan en un orden específico, puedes agregar ORDER BY
dentro de la función GROUP_CONCAT
:
SELECT curso_id, GROUP_CONCAT(nombre ORDER BY nombre ASC) AS alumnos
FROM alumnos
GROUP BY curso_id;
Esto ordenará los nombres alfabéticamente dentro de cada grupo.
SEPARATOR
Para usar un delimitador diferente (por ejemplo, un punto y coma ;
), puedes usar la cláusula SEPARATOR
:
SELECT curso_id, GROUP_CONCAT(nombre SEPARATOR '; ') AS alumnos
FROM alumnos
GROUP BY curso_id;
Resultado:
curso_id | alumnos |
---|---|
1 | Ana; Juan |
2 | Luis; Marta; Sofia |
GROUP_CONCAT
Por defecto, la longitud máxima de resultado de GROUP_CONCAT
es limitada por la variable group_concat_max_len
, que en muchos sistemas tiene un límite de 1024 caracteres. Para aumentar este límite, puedes configurarlo en tu sesión de MySQL de esta manera:
SET SESSION group_concat_max_len = 2048;
GROUP_CONCAT
es una herramienta poderosa en MySQL para agrupar y concatenar valores de una columna en una sola cadena. Al combinarla con GROUP BY
, ORDER BY
y SEPARATOR
, puedes personalizar los resultados según tus necesidades.
Jorge García
Fullstack developer