La funzione GROUP_CONCAT() in MySQL viene utilizzata per concatenare i dati di più righe in un unico campo. Questa è una funzione aggregata (GROUP BY) che restituisce a Corda valore se il gruppo contiene almeno un non- NULLO valore. Altrimenti ritorna NULLO .
Sintassi:
SELECT col1, col2, ..., colN GROUP_CONCAT ( [DISTINCT] col_name1 [ORDER BY clause] [SEPARATOR str_val] ) FROM table_name GROUP BY col_name2;>
parametri:
- col1, col2, ...colN: Questi sono i nomi delle colonne della tabella.
- col_nome1: Colonna della tabella i cui valori sono concatenati in un unico campo per ciascun gruppo.
- nome_tabella: Nome della tabella.
- col_nome2: Colonna della tabella in base al raggruppamento effettuato.
Utilizzo di varie clausole all'interno GRUPPO_CONCAT() funzione
- Distinto: Elimina la ripetizione dei valori dal risultato.
- Ordinato da: Ordina i valori del gruppo in un ordine specifico e quindi li concatena.
- Separatore: Per impostazione predefinita, i valori del gruppo sono separati da ( , ) operatore. Per modificare questo valore di separatore, viene utilizzata una clausola Separator seguita da una stringa letterale. È dato come Separatore 'str_value' .
Esempi:
Consideriamo una tabella Employee:
| emp_id | nomef | lnome | id_dip | forza |
|---|---|---|---|---|
| 1 | mukesh | gupta | 2 | Comando |
| 3 | neelam | sharma | 3 | Laborioso |
| 1 | mukesh | gupta | 2 | Responsabile |
| 2 | Devesh | tyagi | 2 | Puntualità |
| 3 | neelam | sharma | 3 | Automotivato |
| 1 | mukesh | gupta | 2 | Impara velocemente |
| 4 | keshav | singhal | 3 | Ascoltando |
| 2 | Devesh | tyagi | 2 | Impara velocemente |
| 5 | chiedere | jain | 1 | Laborioso |
| 4 | keshav | singhal | 3 | Pensiero critico |
| 5 | chiedere | jain | 1 | Orientato agli obiettivi |
Domanda
1. Utilizzando la semplice funzione GROUP_CONCAT() –
SELECT emp_id, fname, lname, dept_id, GROUP_CONCAT ( strength ) as 'strengths' FROM employee GROUP BY fname;>
Produzione
| emp_id | nomef | lnome | id_dip | punti di forza |
|---|---|---|---|---|
| 1 | mukesh | gupta | 2 | Leadership, responsabile, apprendimento rapido |
| 2 | Devesh | tyagi | 2 | Puntualità, apprendimento rapido |
| 3 | neelam | sharma | 3 | Lavoratore duro, auto-motivato |
| 4 | keshav | singhal | 3 | Ascolto, pensiero critico |
| 5 | chiedere | jain | 1 | Lavoratore duro, orientato agli obiettivi |
2. Utilizzando una clausola DISTINCT –
Domanda
SELECT dept_id, GROUP_CONCAT ( DISTINCT strength) as 'employees strengths' FROM employee GROUP BY dept_id;>
Produzione
| id_dip | punti di forza dei dipendenti |
|---|---|
| 1 | Orientato agli obiettivi, laborioso |
| 2 | Leadership, puntualità, apprendimento rapido, responsabile |
| 3 | Pensiero critico, laborioso, ascolto, automotivato |
3. Utilizzo della clausola ORDER BY –
Domanda
SELECT dept_id, GROUP_CONCAT ( DISTINCT emp_id ORDER BY emp_id SEPARATOR ', ') as 'employees ids' FROM employee GROUP BY dept_id;>
Qui, Separatore ‘,’ separerà i valori con una virgola ( , ) e un carattere di spazio bianco.
Produzione
| id_dip | ID dei dipendenti |
|---|---|
| 1 | 5 |
| 2 | 1, 2 |
| 3 | 3.4 |
Come concatenare più righe di colonne diverse in un unico campo?
Fino ad ora abbiamo visto l'uso della funzione GROUP_CONCAT() per raggruppare i valori di più righe che appartengono alla stessa colonna. Ma, usando concat() function e la funzione group_concat() insieme, possiamo combinare più valori di colonna di righe diverse in un unico campo.
l'eccezione lancia Java
Esempio:
Considerando il dipendente della tabella sopra, se desideriamo trovare la forza dei dipendenti insieme all'ID dei dipendenti nella seconda query, allora viene scritto come-
SELECT dept_id, GROUP_CONCAT ( strengths SEPARATOR ' ') as 'emp-id : strengths' FROM ( SELECT dept_id, CONCAT ( emp_id, ':', GROUP_CONCAT(strength SEPARATOR', ') ) as 'strengths' FROM employee GROUP BY emp_id ) as emp GROUP BY dept_id;>
Spiegazione:
La query precedente è composta da due Istruzioni SELEZIONATE uno interno e uno esterno.
L'istruzione SELECT interna-
Domanda
SELECT dept_id, concat ( emp_id, ':', GROUP_CONCAT ( strength separator ', ' ) ) as 'strengths' FROM employee GROUP BY dept_id, emp_id>
Raggrupperà le righe della tabella dei dipendenti in base a emp_id. La prima colonna risultante mostra dept_id, la seconda colonna mostra emp_id insieme all'elenco dei punti di forza.
Produzione per l'istruzione SELECT interna-
| id_dip | punti di forza |
|---|---|
| 2 | 1: Leadership, Responsabile, Apprendimento rapido |
| 2 | 2: Puntualità, apprendimento rapido |
| 3 | 3: Lavoratore duro, automotivato |
| 3 | 4: Ascolto, pensiero critico |
| 1 | 5: Lavoratore duro, orientato agli obiettivi |
L'istruzione SELECT esterna ora raggrupperà queste righe in base a dept_id.
Produzione
| id_dip | emp-id: punti di forza |
|---|---|
| 1 | 5: Lavoratore duro, orientato agli obiettivi |
| 2 | 1: Leadership, Responsabile, Apprendimento rapido 2:Puntualità, Apprendimento rapido |
| 3 | 3: Lavoratore duro, automotivato 4: Ascolto, pensiero critico |
Nota: Il risultato della funzione GROUP_CONCAT() viene troncato alla lunghezza massima, ad es 1024 che è dato dalla variabile di sistema group_concat_max_len . Tuttavia, il valore della variabile group_concat_max_len può essere modificato in fase di esecuzione utilizzando IMPOSTATO comando come-
SET [GLOBAL | SESSION] group_concat_max_len = value; value: It is the new value set to the variable.>