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:
- 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.
- 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.
- 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->EHLOInfine, 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ù.