Sintaxis

GROUP_CONCAT(expr)

Descripción

Esta función devuelve un string resultado con los valores no NULL concatenados de un grupo. Devuelve NULL si no hay valores que no sean NULL.

La longitud máxima devuelta en bytes está determinada por la variable de sistema del servidor group_concat_max_len, que por defecto es 1M (> = MariaDB 10.2.4) o 1K (<= MariaDB 10.2.3).

Si group_concat_max_len <= 512, el tipo de retorno es VARBINARY o VARCHAR; de lo contrario, el tipo de retorno es BLOB o TEXT. La elección entre tipos binarios o no binarios depende de la entrada.

La sintaxis completa es la siguiente:

GROUP_CONCAT([DISTINCT] expr [,expr ...][ORDERBY  col_name 
                 [ASC|DESC][,col_name ...]][SEPARATOR str_val])

DISTINCT elimina los valores duplicados de la salida string.

ORDER BY determina el orden de los valores devueltos.

SEPARATOR especifica un separador entre los valores. El separador predeterminado es una coma (,). Es posible evitar el uso de un separador especificando un vacío string.

GROUP_CONCAT

MariaDB comenzando con 10.3.3

Hasta que MariaDB 10.3.2, no fue posible utilizar la cláusula LIMIT con GROUP_CONCAT. Esta restricción se levantó en MariaDB 10.3.3.

Ejemplos de

SELECT student_name,
       GROUP_CONCAT(test_score)FROM student
       GROUPBY student_name;

Obtenga una lista legible de usuarios de MariaDB de la tabla mysql.user:

SELECT GROUP_CONCAT(DISTINCTUserORDERBYUser SEPARATOR 'n')FROM mysql.user;

En el ejemplo anterior, DISTINCT se utiliza porque el mismo usuario puede aparecer más de una vez. La nueva línea (n) utilizado como SEPARATOR hace que los resultados sean más fáciles de leer.

Obtenga una lista legible de hosts desde los que cada usuario puede conectarse:

SELECTUser, GROUP_CONCAT(Host ORDERBY Host SEPARATOR ', ')FROM mysql.userGROUPBYUserORDERBYUser;

El primer ejemplo muestra la diferencia entre GROUP_CONCATORDER BY (que ordena los hosts concatenados) y el SELECTORDER BY (que ordena las filas).

De MariaDB 10.3.3, LIMIT se puede utilizar con GROUP_CONCAT, así, por ejemplo, dada la siguiente tabla:

CREATETABLE d (dd DATE, cc INT);INSERTINTO d VALUES('2017-01-01',1);INSERTINTO d VALUES('2017-01-02',2);INSERTINTO d VALUES('2017-01-04',3);

la siguiente consulta:

SELECT SUBSTRING_INDEX(GROUP_CONCAT(CONCAT_WS(":",dd,cc)ORDERBY cc DESC),",",1)FROM d;+----------------------------------------------------------------------------+| SUBSTRING_INDEX(GROUP_CONCAT(CONCAT_WS(":",dd,cc)ORDERBY cc DESC),",",1)|+----------------------------------------------------------------------------+|2017-01-04:3|+----------------------------------------------------------------------------+

se puede reescribir más simplemente como:

SELECT GROUP_CONCAT(CONCAT_WS(":",dd,cc)ORDERBY cc DESCLIMIT1)FROM d;+-------------------------------------------------------------+| GROUP_CONCAT(CONCAT_WS(":",dd,cc)ORDERBY cc DESCLIMIT1)|+-------------------------------------------------------------+|2017-01-04:3|+-------------------------------------------------------------+

Ver también

  • CONCAT ()
  • CONCAT_WS ()
  • SELECCIONE
  • ORDENAR POR

El contenido reproducido en este sitio es propiedad de sus respectivos dueños, y MariaDB no revisa este contenido con anticipación. Los puntos de vista, la información y las opiniones expresadas por este contenido no representan necesariamente las de MariaDB o de cualquier otra parte.