Concatenar varias filas en una con MySQL

abr 25, 2014 Por José Aranda

Existe una función en MySQL para concatenar varias filas en una sola de manera que obtenemos una cadena resultante con los valores no nulos. Descubramos cómo funciona.

La función de MySQL GROUP_CONCAT es muy útil a la hora de obtener agrupaciones de elementos en alguna consulta.

Su sintaxis en la siguiente:

GROUP_CONCAT([DISTINCT] expr [,expr ...]

             [ORDER BY {unsigned_integer | col_name | expr}

                 [ASC | DESC] [,col_name ...]]

             [SEPARATOR str_val])

Veamos algunos ejemplos de su uso:

Imaginaros que tenemos la siguiente tabla con datos sobre los alumnos de una clase:

SELECT * FROM alumnos

id_alumno

nombre

dni

1

Juan

76785434S

2

José

73778423T

3

Ana

72778345J

Si queremos por ejemplo obtener una lista con los id de los alumnos de la clase separados por comas, podemos hacerlo con la siguiente consulta:

SELECT GROUP_CONCAT(id_alumno SEPARATOR ‘,’) AS ids_alumnos

FROM alumnos

ids_alumnos

1,2,3

Si queremos obtener una lista con varios campos, por ejemplo queremos obtener una lista con el nombre y el dni separados por comas. Podemos hacer algo parecido a lo siguiente:

SELECT GROUP_CONCAT(nombre,dni SEPARATOR ‘,’) AS datos_alumnos

FROM alumnos

datos_alumnos

Juan76785434S,José73778423T,Ana72778345J

Incluso podemos concatenar cadenas entre los diferentes campos.

SELECT GROUP_CONCAT(nombre,’-’,dni SEPARATOR ‘,’) AS datos_alumnos

FROM alumnos

datos_alumnos

Juan-76785434S,José-73778423T,Ana-72778345J

La única precaución que debéis tener con esta función es el límite de la cadena resultante ya que por defecto está especificada en 1024 caracteres y si es mayor se truncará el resultado.

Pero si quereis utilizar la función de MySQL GROUP_CONCAT con más caracteres en el resultado podéis modificar la variable global de MySQL group_concat_max_len.

SET GLOBAL group_concat_mas_len = 2048

Última modificación: oct 17, 2024