Concatenar varias filas en una con MySQL

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

6 comentarios para Concatenar varias filas en una con MySQL

  • Luis Enrique  Luis Enrique dice:

    Buena Explicación completa de esta funcion

    19 de enero de 2015 - 18:26:08
    Saúl  Saúl dice:

    Excelente información me cayó como anillo al dedo.

    27 de abril de 2015 - 17:40:57
    Jorge  Jorge dice:

    Genial, me acabas de salvar la vida

    06 de diciembre de 2015 - 03:21:51
    Victor  Victor dice:

    Gracias por el aporte me sirvio de mucho.

    01 de julio de 2016 - 05:39:55
    tony romero  tony romero dice:

    buenisimo!

    Lo implementaré en mi SP y les cuento!

    02 de marzo de 2017 - 19:17:38
    john  john dice:

    Ahora la siguiente parte seria como mostrar eso datos en diferentes columnas con un alias

    30 de junio de 2017 - 18:48:38

Deja un comentario




Si le ha parecido interesante nuestro artículo Concatenar varias filas en una con MySQL dentro de la categoría MySQL recuerde que puede suscribirse a nuestra dirección RSS,a nuestro newsletter o seguirnos en las redes sociales