logo

MySQL | Funzione Group_CONCAT()

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.>