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.