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