logo

MySQL | Funcția Group_CONCAT().

Funcția GROUP_CONCAT() din MySQL este folosită pentru a concatena datele de pe mai multe rânduri într-un singur câmp. Aceasta este o funcție agregată (GROUP BY) care returnează a Şir valoare dacă grupul conține cel puțin un non- NUL valoare. În caz contrar, se întoarce NUL .

Sintaxă:



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: Acestea sunt numele de coloane ale tabelului.
  • col_name1: Coloana tabelului ale cărei valori sunt concatenate într-un singur câmp pentru fiecare grup.
  • table_name: Numele tabelului.
  • col_name2: Coloana tabelului în funcție de care se face gruparea.

Utilizarea diferitelor clauze în interior GROUP_CONCAT() funcţie

  • Distinct: Elimină repetarea valorilor din rezultat.
  • Comandă după: Sortează valorile grupului într-o anumită ordine și apoi le concatenează.
  • Separator: În mod implicit, valorile grupului sunt separate prin ( , ) operator. Pentru a modifica această valoare a separatorului, se folosește o clauză Separator urmată de un literal șir. Este dat ca Separator „str_value” .

Exemple:

Să luăm în considerare un tabel de angajați:



emp_id fname numele dept_id putere
1 mukesh gupta 2 Conducere
3 neelam sharma 3 Muncitor
1 mukesh gupta 2 Responsabil
2 Devesh tyagi 2 Punctualitate
3 neelam sharma 3 Auto-motivat
1 mukesh gupta 2 Care invata rapid
4 keshav singhal 3 Ascultare
2 Devesh tyagi 2 Care invata rapid
5 cere jain 1 Muncitor
4 keshav singhal 3 Gândire critică
5 cere jain 1 Cu un țel bine determinat

Interogare

1. Folosind funcția simplă GROUP_CONCAT() –

SELECT emp_id, fname, lname, dept_id,  GROUP_CONCAT ( strength ) as 'strengths'  FROM employee  GROUP BY fname;>

Ieșire

emp_id fname numele dept_id punctele forte
1 mukesh gupta 2 Leadership, responsabil, care învață rapid
2 Devesh tyagi 2 Punctualitate, învățare rapidă
3 neelam sharma 3 Muncitor, automotivat
4 keshav singhal 3 Ascultare, gândire critică
5 cere jain 1 Muncitor, orientat spre obiective

2. Folosind o clauză DISTINCT –

Interogare

SELECT dept_id,  GROUP_CONCAT ( DISTINCT strength) as 'employees strengths'  FROM employee  GROUP BY dept_id;>

Ieșire

dept_id punctele forte ale angajatilor
1 Orientat spre obiective, muncitor
2 Leadership, punctualitate, învățare rapidă, responsabil
3 Gândire critică, harnic, ascultător, automotivat

3. Utilizarea clauzei ORDER BY –



Interogare

SELECT dept_id,  GROUP_CONCAT ( DISTINCT emp_id ORDER BY emp_id SEPARATOR ', ') as 'employees ids'  FROM employee  GROUP BY dept_id;>

Aici, Separator ‘, ‘ va separa valorile printr-o virgulă ( , ) și un caracter alb.

Ieșire

dept_id ID-urile angajaților
1 5
2 1, 2
3 3. 4

Cum se concatenează mai multe rânduri de coloane diferite într-un singur câmp?

Până acum am văzut utilizarea funcției GROUP_CONCAT() pentru a grupa valorile mai multor rânduri care aparțin aceleiași coloane. Dar, folosind concat() function și group_concat() funcționează împreună, putem combina valorile mai mult de o coloană de diferite rânduri într-un singur câmp.

Exemplu:
Luând în considerare angajatul din tabelul de mai sus, dacă dorim să găsim puterea angajaților împreună cu ID-ul angajaților în a doua interogare, atunci este scris ca-

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

Explicaţie:
Interogarea de mai sus constă din două Instrucțiuni SELECT una interioară și una exterioară.

Instrucțiunea interioară SELECT-

Interogare

SELECT dept_id, concat ( emp_id, ':', GROUP_CONCAT ( strength separator ', ' ) ) as 'strengths'  FROM employee  GROUP BY dept_id, emp_id>

Acesta va grupa rândurile tabelului de angajați în funcție de emp_id. Prima coloană rezultată afișează dept_id, a doua coloană afișează emp_id împreună cu lista de puncte forte.

Ieșire pentru instrucțiunea SELECT interioară-

dept_id punctele forte
2 1: Leadership, responsabil, învățator rapid
2 2: Punctualitate, învățare rapidă
3 3: muncitor, automotivat
3 4: Ascultare, gândire critică
1 5: Muncitor, orientat spre obiective

Instrucțiunea SELECT exterioară va grupa acum aceste rânduri în funcție de dept_id.

Ieșire

dept_id emp-id: puncte forte
1 5: Muncitor, orientat spre obiective
2 1: Conducere, responsabil, învățat rapid 2: Punctualitate, învățător rapid
3 3: Muncitor, automotivat 4: Ascultare, Gândire critică

Notă: Rezultatul funcției GROUP_CONCAT() este trunchiat la lungimea maximă, adică 1024 care este dat de variabila de sistem group_concat_max_len . Cu toate acestea, valoarea variabilei group_concat_max_len poate fi modificată în timpul execuției utilizând A STABILIT comanda ca-

SET [GLOBAL | SESSION] group_concat_max_len = value;   value:   It is the new value set to the variable.>