¿Cómo utilizar GROUP BY para concatenar cadenas en MySQL?

Resuelto Paweł Hajdan asked hace 16 años • 6 respuestas

Básicamente la pregunta es cómo llegar a esto:

foo_id foo_nombre
1 un
1B
2 tazas

a esto:

foo_id foo_nombre
1AB
2 tazas
Paweł Hajdan avatar Sep 30 '08 00:09 Paweł Hajdan
Aceptado
SELECT id, GROUP_CONCAT(name SEPARATOR ' ') FROM table GROUP BY id;

https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html#function_group-concat

Desde el enlace anterior GROUP_CONCAT: Esta función devuelve un resultado de cadena con los valores no NULL concatenados de un grupo. Devuelve NULL si no hay valores que no sean NULL.

Scott Noyes avatar Sep 29 '2008 17:09 Scott Noyes
SELECT id, GROUP_CONCAT( string SEPARATOR ' ') FROM table GROUP BY id

Más detalles aquí .

Desde el enlace anterior GROUP_CONCAT: Esta función devuelve un resultado de cadena con los valores no NULL concatenados de un grupo. Devuelve NULL si no hay valores que no sean NULL.

Graeme Perrow avatar Sep 29 '2008 17:09 Graeme Perrow
SELECT id, GROUP_CONCAT(name SEPARATOR ' ') FROM table GROUP BY id;

: - En MySQL, puede obtener los valores concatenados de combinaciones de expresiones. Para eliminar valores duplicados, utilice la cláusula DISTINCT . Para ordenar valores en el resultado, utilice la cláusula ORDER BY. Para ordenar en orden inverso , agregue la palabra clave DESC (descendente) al nombre de la columna por la que está ordenando en la cláusula ORDER BY. El valor predeterminado es el orden ascendente; esto se puede especificar explícitamente utilizando la palabra clave ASC. El separador predeterminado entre valores de un grupo es la coma (“”). Para especificar un separador explícitamente, utilice SEPARADOR seguido del valor literal de cadena que debe insertarse entre los valores del grupo. Para eliminar el separador por completo, especifique SEPARADOR '' .

GROUP_CONCAT([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [SEPARATOR str_val])

O

mysql> SELECT student_name,
    ->     GROUP_CONCAT(DISTINCT test_score
    ->               ORDER BY test_score DESC SEPARATOR ' ')
    ->     FROM student
    ->     GROUP BY student_name;
Exundoz avatar Aug 08 '2013 05:08 Exundoz