MySQL | Group_CONCAT() Funktion

GROUP_CONCAT()-funktionen i MySQL bruges til at sammenkæde data fra flere rækker i ét felt. Dette er en aggregeret (GROUP BY) funktion, der returnerer en Snor værdi, hvis gruppen indeholder mindst én ikke- NUL værdi. Ellers vender den tilbage NUL .

Syntaks:

SELECT col1, col2, ..., colN GROUP_CONCAT ( [DISTINCT] col_name1  [ORDER BY clause] [SEPARATOR str_val] )  FROM table_name GROUP BY col_name2; 

Parametre:

  • col1, col2, ...colN: Dette er kolonnenavnene i tabellen.
  • col_name1: Kolonne i tabellen, hvis værdier er sammenkædet i et enkelt felt for hver gruppe.
  • tabelnavn: Navn på bord.
  • col_name2: Kolonne i tabellen, efter hvilken gruppering er udført.

Brug af forskellige klausuler indeni GROUP_CONCAT() fungere

  • Særskilt: Det eliminerer gentagelsen af ​​værdier fra resultatet.
  • Bestil efter: Den sorterer gruppens værdier i en bestemt rækkefølge og sammenkæder dem derefter.
  • Separator: Som standard er gruppens værdier adskilt af ( , ) operatør. For at ændre denne separatorværdi bruges en Separator-sætning efterfulgt af en streng-literal. Det er givet som Separator 'str_værdi' .

Eksempler:

Lad os overveje en medarbejdertabel:

emp_id fnavn lnavn dept_id styrke
1 mukesh gupta 2 Ledelse
3 neelam sharma 3 Hårdtarbejdende
1 mukesh gupta 2 Ansvarlig
2 Devesh tyagi 2 Punktlighed
3 neelam sharma 3 Selvmotiveret
1 mukesh gupta 2 Hurtig lærer
4 keshav singel 3 Hører efter
2 Devesh tyagi 2 Hurtig lærer
5 Spørg jain 1 Hårdtarbejdende
4 keshav singel 3 Kritisk tænkning
5 Spørg jain 1 Målrettet

Forespørgsel

1. Brug af simpel GROUP_CONCAT() funktion –

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

Produktion

emp_id fnavn lnavn dept_id styrker
1 mukesh gupta 2 Lederskab, Ansvarlig, Lærer hurtigt
2 Devesh tyagi 2 Punktlighed, lærenem
3 neelam sharma 3 Hårdtarbejdende, selvmotiveret
4 keshav singel 3 At lytte, kritisk tænkning
5 Spørg jain 1 Hårdtarbejdende, målrettet

2. Brug af en DISTINCT-klausul –

Forespørgsel

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

Produktion

dept_id medarbejdernes styrker
1 Målrettet, hårdtarbejdende
2 Lederskab, punktlighed, lærenem, ansvarlig
3 Kritisk tænkning, hårdtarbejdende, lyttende, selvmotiveret

3. Brug af ORDER BY-klausul –

Forespørgsel

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

Her, Separator ', ' vil adskille værdierne med et komma ( , ) og et mellemrumstegn.

Produktion

dept_id medarbejder-id
1 5
2 1, 2
3 3. 4

Hvordan kan man sammenkæde flere rækker af forskellige kolonner i et enkelt felt?

Indtil nu har vi set brugen af ​​GROUP_CONCAT()-funktionen til at gruppere værdierne af flere rækker, der tilhører samme kolonne. Men ved at bruge concat() function og group_concat() fungerer sammen, vi kan kombinere mere end én kolonneværdier i forskellige rækker i et enkelt felt.

Eksempel:
I betragtning af ovenstående tabelmedarbejder, hvis vi ønsker at finde medarbejderes styrke sammen med medarbejder-id i anden forespørgsel, skrives det som-

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; 

Forklaring:
Ovenstående forespørgsel består af to VÆLG udsagn en indre og den ydre.

Den indre SELECT-sætning-

Forespørgsel

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

Det vil gruppere rækkerne af medarbejdertabellen i henhold til emp_id. Den første resulterede kolonne viser dept_id, anden kolonne viser emp_id sammen med deres styrkeliste.

Produktion for indre SELECT-sætning-

dept_id styrker
2 1: Lederskab, Ansvarlig, Lærer hurtigt
2 2: Punktlighed, Lærer hurtigt
3 3: Hårdtarbejdende, Selvmotiveret
3 4: Lytte, Kritisk tænkning
1 5: Hårdtarbejdende, målorienteret

Den ydre SELECT-sætning vil nu gruppere disse rækker i henhold til dept_id.

Produktion

dept_id emp-id: styrker
1 5: Hårdtarbejdende, målorienteret
2 1: Lederskab, Ansvarlig, Lærer hurtigt 2: Punktlighed, Lærer hurtigt
3 3: Hårdtarbejdende, Selvmotiveret 4: Lytte, Kritisk tænkning

Bemærk: Resultatet af GROUP_CONCAT()-funktionen afkortes til den maksimale længde, dvs 1024 som er givet af systemvariabel group_concat_max_len . Værdien af ​​variabelen group_concat_max_len kan dog ændres under kørsel ved at bruge SÆT kommando som-

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