mysql.h


GROUP_CONCAT

GROUP_CONCAT(expr)

Sintaxis completa:

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

Esta función se añadió en MySQL 4.1. Devuelve una cadena con la concatenación de los valores del grupo:

mysql> SELECT student_name,
    ->        GROUP_CONCAT(test_score)
    ->        FROM student 
    ->        GROUP BY student_name;

O:

mysql> SELECT student_name,
    ->        GROUP_CONCAT(DISTINCT test_score
    ->                     ORDER BY test_score DESC SEPARATOR " ")
    ->        FROM student
    ->        GROUP BY student_name;

En MySQL se pueden obtener los valores concatenados de combinaciones de expresiones. Se pueden eliminar valores duplicados usando DISTINCT. Si se desea ordenar los valores del resultado se puede usar la cláusula ORDER BY. Para ordenar en orden inverso, añadir la palabra clave DESC (descendente) al nombre de la columna por la que se está ordenando en la cláusula ORDER BY. Por defecto, el orden es ascendente; que se puede especificar explícitamente usando la palabra clave ASC. SEPARATOR es el valor de cadena que se insertará entre los valores del resultado. Por defecto es una coma (","). Se puede eliminar el separador por completo especificando SEPARATOR "". También se puede limitar la longitud máxima con la variable group_concat_max_len en la configuración. La sintaxis para hacerlo durante la ejecución de MySQL:

SET [SESSION | GLOBAL] group_concat_max_len = unsigned_integer;

Si se ha asignado una longitud máxima, el resultado se truncará a esa longitud. La función GROUP_CONCAT() es una implementación mejorada de la función básica LIST() soportada por Sybase SQL Anywhere. GROUP_CONCAT() mantiene compatibilidad con la extremadamente limitada funcionalidad de LIST(), si sólo se especifica una columna y ninguna otra opción. LIST() tiene un modo de orden por defecto.

Si se usa una función de grupo en una sentencia que contenga la cláusula GROUP BY, equivale a agrupar todas las filas.