Nuestros desarrolladores estrellas han agotado sus provisiones de café, buscando a tiempo completo por la respuesta, hasta que Julián encontró la contestación en Bitbucket y ahora la compartimos contigo.
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_CONCAT
ORDER BY (que ordena los hosts concatenados) y el SELECT
ORDER 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.
Acuérdate de que tienes la opción de comentar tu experiencia .