¿Cómo utilizar GROUP BY para concatenar cadenas en MySQL?
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
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.
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.
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;