MySQL Group Concat per stringhe

Mysql Group Concat Strings



La funzione GROUP _CONCAT è una funzione di aggregazione GROUP BY che consente di concatenare i valori delle colonne da più righe in un unico campo. Restituisce una stringa se il gruppo set contiene un valore di colonna uno o nessun valore nullo e restituisce un valore NULL se non è possibile trovarne nessuno.

Questo tutorial ti insegnerà come utilizzare la funzione MySQL GROUP_CONCAT() per combinare le stringhe di un gruppo con diverse opzioni.







Utilizzo di base

Come accennato, questa funzione restituisce un risultato stringa con i valori dei valori non nulli concatenati o un NULL se non ne esiste nessuno.



La sintassi generale è:



GROUP_CONCAT ([ DISTINTO ]espr[,espr...]
[ ORDINATO DA espr
[ ASC | DESC ] [,col_name...]]
[SEPARATORE str_val])

Spiegazione

Dalla sintassi sopra, puoi vedere che la funzione GROUP_CONCAT utilizza clausole e vincoli MySQL per specificare le varie opzioni:





  1. DISTINTO: La clausola DISTINCT aiuta a rimuovere i valori duplicati nel gruppo set prima del processo di concatenazione. Considera il nostro tutorial che spiega MySQL DISTINCT per capire come funziona.
  2. ORDINATO DA: La clausola successiva è ORDER BY che aiuta a ordinare i valori in un ordine specificato. L'ordine può essere crescente o decrescente. Se non viene specificato alcun ordine, MySQL formatta i valori in ordine crescente.
  3. SEPARATORE : Questa clausola imposta la stringa letterale inserita tra i valori del gruppo durante il processo di concatenazione. Per impostazione predefinita, MySQL utilizza una virgola (,) per separare i valori.

NOTA: Il risultato della stringa generato dalla funzione MySQL GROUP_CONCAT() è limitato a una lunghezza pari al valore impostato nella variabile group_concat_max_len. Questo valore è definito nel sistema e ha un valore predefinito di 1024. È possibile modificare questo valore globalmente o impostarlo nella sessione desiderata.

SET [ GLOBALE | SESSIONE ]group_concat_max_len= valore ;

Considera il riferimento qui sotto per saperne di più:



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

Come funziona: esempio

Consentitemi di utilizzare un semplice esempio per spiegare come funziona la funzione GROUP_CONCAT(). Considera la tabella con un campo per CHAR come:

CREARE TAVOLO concatena ( valore CHAR );

Inseriamo i valori nella tabella come mostrato nella query seguente:

INSERIRE IN concatena ( valore ) VALORI ('H'),('E'),('L'),('L'),('O');

Se eseguiamo un'operazione di base GROUP_CONCAT sui valori nella tabella, otterremo un risultato stringa come mostrato di seguito:

SELEZIONARE GROUP_CONCAT ( DISTINTO valore ORDINATO DA valore ASC SEPARATORE'') A PARTIRE DAL concatena ;

Il valore risultante è:

+ -------------------------------------------------- -------------- +
| GROUP_CONCAT ( DISTINTO valore ORDINATO DA valore ASC SEPARATORE'') |
+ -------------------------------------------------- -------------- +
|E H L O|
+ -------------------------------------------------- -------------- +
1riga in set (0.01secondo)

Vuoi un altro modo per capire cosa è successo al risultato sopra riportato?

Iniziamo rimuovendo tutti i valori duplicati a causa della clausola MySQL DISTINCT che rimuove una L.

Successivamente, procediamo a ORDER BY ordine crescente come definito in (ASC), che altera la stringa sotto forma di

HELO->EHLO

Infine, eseguiamo il processo di concatenazione utilizzando uno spazio come separatore per i valori impostati, ottenendo la stringa E H L O da {H, E, L, L O}.

Esempi di casi d'uso

Prendiamo un database reale e usiamolo per illustrare come possiamo implementare la funzione GROUP_CONCAT(). In questo esempio, utilizzeremo il database Sakila e, in particolare, la tabella degli indirizzi del database Sakila.

Considera la risorsa di seguito per scaricare il database per i tuoi esempi:

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

Nella tabella degli indirizzi del database Sakila, otterrai la colonna del distretto. Possiamo ottenere tutti i distretti unici separati da una pipe come mostrato nella query seguente:

SELEZIONARE GROUP_CONCAT ( DISTINTO quartiere ORDINATO DA distretto SEPARATORE'|') A PARTIRE DAL sakila.indirizzo LIMITE 5;

La query sopra mostrerà tutti i distretti DISTINCT e li ordinerà in ordine crescente separati da una barra verticale.

NOTA: La funzione GROUP_CONCAT() è una funzione aggregata. Pertanto, è necessario specificare l'istruzione ORDER BY all'interno della funzione e non nell'istruzione SELECT.

Conclusione

La funzione MySQL GROUP_CONCAT() discussa in questo tutorial è una funzione utile che consente di creare dati univoci, ordinati e organizzati da una tabella che può contenere duplicati e dati non ordinati.

Considera i documenti o i nostri altri tutorial MySQL per saperne di più.