Grup MySQL Concat per a cordes

Mysql Group Concat Strings



La funció GROUP _CONCAT és una funció agregada GROUP BY que us permet concatenar els valors de columna de diverses files en un sol camp. Retorna una cadena si el grup establert conté un valor de columna nul o nul i retorna un valor NUL si no es troba cap.

Aquest tutorial us ensenyarà a utilitzar la funció MySQL GROUP_CONCAT () per combinar cadenes d’un grup amb diverses opcions.







Ús bàsic

Com hem esmentat, aquesta funció retorna un resultat de cadena amb els valors dels valors no nuls concatenats o un NULL si no n’hi ha cap.



La sintaxi general és:



GROUP_CONCAT ([ DISTINGUT ]expr[,expr ...]
[ DEMANAT PER expr
[ ASC | DESC ] [,nom_col ...]]
[SEPARADOR str_val])

Explicació

Des de la sintaxi anterior, podeu veure que la funció GROUP_CONCAT utilitza clàusules i restriccions MySQL per especificar les diverses opcions:





  1. DISTINGUIR: La clàusula DISTINCT ajuda a eliminar els valors duplicats del grup establert abans del procés de concatenació. Considereu el nostre tutorial per explicar MySQL DISTINCT per entendre com funciona.
  2. DEMANAT PER: La següent clàusula és ORDER BY que ajuda a ordenar els valors en un ordre especificat. L'ordre pot ser ascendent o descendent. Si no s'especifica cap ordre, MySQL formata els valors en ordre ascendent.
  3. SEPARADOR : Aquesta clàusula estableix la literal de cadena inserida entre els valors del grup en el procés de concatenació. Per defecte, MySQL utilitza una coma (,) per separar els valors.

NOTA: El resultat de la cadena generat per la funció MySQL GROUP_CONCAT () està limitat a una longitud del valor establert a la variable group_concat_max_len. Aquest valor es defineix al sistema i té un valor per defecte de 1024. Podeu canviar aquest valor globalment o establir-lo a la sessió que necessiteu.

CONJUNT [ GLOBAL | SESSIÓ ]group_concat_max_len= valor ;

Consulteu la referència següent per obtenir més informació:



https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_group_concat_max_len

Com funciona: exemple

Permeteu-me utilitzar un exemple senzill per explicar com funciona la funció GROUP_CONCAT (). Considereu la taula amb un camp per a CHAR com:

CREAR TAULA concat ( valor CHAR );

Inserim valors a la taula tal com es mostra a la consulta següent:

INSERTAR EN concat ( valor ) VALORS ('H'),('I'),('ELS'),('ELS'),('O');

Si realitzem una operació bàsica GROUP_CONCAT amb els valors de la taula, obtindrem un resultat de cadena com es mostra a continuació:

SELECCIONA GROUP_CONCAT ( DISTINGUT valor DEMANAT PER valor ASC SEPARADOR'') DE concat ;

El valor resultant és:

+ ------------------------------------------------- -------------- +
| GROUP_CONCAT ( DISTINGUT valor DEMANAT PER valor ASC SEPARADOR'') |
+ ------------------------------------------------- -------------- +
|E H L O|
+ ------------------------------------------------- -------------- +
1fila dins conjunt (0.01seg)

Voleu una altra manera d’entendre què ha passat amb el resultat donat més amunt?

Comencem per eliminar tots els valors duplicats a causa de la clàusula MySQL DISTINCT que elimina una L.

A continuació, passem a ORDRE PER ordre ascendent tal com es defineix a (ASC), que modifica la cadena en forma de

HELO->EHLO

Finalment, realitzem el procés de concatenació utilitzant un espai com a separador dels valors establerts, donant lloc a la cadena E H L O de {H, E, L, L O}.

Casos d’ús d’exemple

Prenem una base de dades real i la fem servir per il·lustrar com podem implementar la funció GROUP_CONCAT (). En aquest exemple, utilitzarem la base de dades Sakila i, específicament, la taula d’adreces de la base de dades Sakila.

Penseu en el recurs següent per descarregar la base de dades dels vostres exemples:

https://dev.mysql.com/doc/index-other.html

A la taula d’adreces de la base de dades Sakila, obtindreu la columna de districte. Podem obtenir tots els districtes únics separats per una canonada, tal com es mostra a la consulta següent:

SELECCIONA GROUP_CONCAT ( DISTINGUT districte DEMANAT PER districte SEPARADOR'|') DE sakila.adreça LÍMIT 5;

La consulta anterior mostrarà tots els districtes DISTINCT i els ordenarà en ordre ascendent separats per una canonada.

NOTA: La funció GROUP_CONCAT () és una funció agregada. Per tant, cal que especifiqueu la sentència ORDER BY dins de la funció i no a la sentència SELECT.

Conclusió

La funció MySQL GROUP_CONCAT () que es parla en aquest tutorial és una funció útil que us permet crear dades úniques, ordenades i organitzades a partir d'una taula que pot contenir dades duplicades i no ordenades.

Consulteu els documents o els nostres altres tutorials de MySQL per obtenir més informació.