GROUP_CONCAT()-funksjonen i MySQL brukes til å sette sammen data fra flere rader til ett felt. Dette er en aggregert (GROUP BY) funksjon som returnerer en String verdi hvis gruppen inneholder minst én ikke- NULL verdi. Ellers kommer den tilbake NULL .
Syntaks:
SELECT col1, col2, ..., colN GROUP_CONCAT ( [DISTINCT] col_name1 [ORDER BY clause] [SEPARATOR str_val] ) FROM table_name GROUP BY col_name2;>
Parametere:
- col1, col2, ...colN: Dette er kolonnenavnene til tabellen.
- col_name1: Kolonne i tabellen hvis verdier er koblet sammen i ett enkelt felt for hver gruppe.
- tabellnavn: Navn på tabellen.
- col_name2: Kolonne i tabellen etter hvilken gruppering er utført.
Bruk av ulike klausuler inne GROUP_CONCAT() funksjon
- Distinkt: Det eliminerer gjentakelse av verdier fra resultatet.
- Rekkefølge etter: Den sorterer verdiene til gruppen i en bestemt rekkefølge og kobler dem deretter sammen.
- Separator: Som standard er verdiene til gruppen atskilt med ( , ) operatør. For å endre denne skilleverdien, brukes en Separator-klausul etterfulgt av en streng-literal. Det er gitt som Skilletegn «str_value» .
Eksempler:
La oss vurdere en ansatttabell:
| emp_id | fnavn | lnavn | dept_id | styrke |
|---|---|---|---|---|
| 1 | mukesh | gupta | 2 | Ledelse |
| 3 | neelam | sharma | 3 | Hardtarbeidende |
| 1 | mukesh | gupta | 2 | Ansvarlig |
| 2 | Devesh | tyagi | 2 | Punktlighet |
| 3 | neelam | sharma | 3 | Selvmotivert |
| 1 | mukesh | gupta | 2 | Lærer raskt |
| 4 | keshav | singel | 3 | Lytter |
| 2 | Devesh | tyagi | 2 | Lærer raskt |
| 5 | spørre | jain | 1 | Hardtarbeidende |
| 4 | keshav | singel | 3 | Kritisk tenking |
| 5 | spørre | jain | 1 | Målrettet |
Spørsmål
1. Bruke enkel GROUP_CONCAT()-funksjon –
SELECT emp_id, fname, lname, dept_id, GROUP_CONCAT ( strength ) as 'strengths' FROM employee GROUP BY fname;>
Produksjon
| emp_id | fnavn | lnavn | dept_id | styrker |
|---|---|---|---|---|
| 1 | mukesh | gupta | 2 | Lederskap, Ansvarlig, Lærer raskt |
| 2 | Devesh | tyagi | 2 | Punktlighet, lærer raskt |
| 3 | neelam | sharma | 3 | Hardtarbeidende, selvmotivert |
| 4 | keshav | singel | 3 | Lytte, kritisk tenkning |
| 5 | spørre | jain | 1 | Hardtarbeidende, målrettet |
2. Bruke en DISTINCT-klausul –
Spørsmål
SELECT dept_id, GROUP_CONCAT ( DISTINCT strength) as 'employees strengths' FROM employee GROUP BY dept_id;>
Produksjon
| dept_id | ansattes styrker |
|---|---|
| 1 | Målrettet, hardtarbeidende |
| 2 | Lederskap, punktlighet, lærevillig, ansvarlig |
| 3 | Kritisk tenkning, hardtarbeidende, lyttende, selvmotivert |
3. Bruk av ORDER BY-klausulen –
Spørsmål
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 skille verdiene med komma ( , ) og et mellomrom.
Produksjon
| dept_id | ansatte-ID |
|---|---|
| 1 | 5 |
| 2 | 1, 2 |
| 3 | 3. 4 |
Hvordan sette sammen flere rader med forskjellige kolonner i et enkelt felt?
Til nå har vi sett bruken av GROUP_CONCAT()-funksjonen for å gruppere verdiene til flere rader som tilhører samme kolonne. Men, bruker concat() function og group_concat() fungerer sammen, vi kan kombinere mer enn én kolonneverdier av forskjellige rader i ett felt.
Eksempel:
Med tanke på ansatt i tabellen ovenfor, hvis vi ønsker å finne ansattes styrke sammen med ansattes ID i andre spørring, skrives det som-
sql velg 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:
Spørsmålet ovenfor består av to SELECT-utsagn en indre og den ytre.
Den indre SELECT-setningen-
Spørsmål
SELECT dept_id, concat ( emp_id, ':', GROUP_CONCAT ( strength separator ', ' ) ) as 'strengths' FROM employee GROUP BY dept_id, emp_id>
Den vil gruppere radene med ansatttabell i henhold til emp_id. Den første resulterte kolonnen viser dept_id, den andre kolonnen viser emp_id sammen med deres styrkeliste.
Produksjon for indre SELECT-setning-
| dept_id | styrker |
|---|---|
| 2 | 1: Lederskap, Ansvarlig, Lærer raskt |
| 2 | 2: Punktlighet, rask innlærer |
| 3 | 3: Hardtarbeidende, selvmotivert |
| 3 | 4: Lytte, kritisk tenkning |
| 1 | 5: Hardtarbeidende, målrettet |
Den ytre SELECT-setningen vil nå gruppere disse radene i henhold til dept_id.
Produksjon
| dept_id | emp-id: styrker |
|---|---|
| 1 | 5: Hardtarbeidende, målrettet |
| 2 | 1: Lederskap, Ansvarlig, Lærer raskt 2: Punktlighet, Lærer raskt |
| 3 | 3: Hardtarbeidende, Selvmotivert 4:Lytte, Kritisk tenkning |
Merk: Resultatet av GROUP_CONCAT()-funksjonen avkortes til maksimal lengde, dvs 1024 som er gitt av systemvariabel group_concat_max_len . Verdien til variabelen group_concat_max_len kan imidlertid endres under kjøring ved å bruke SETT kommando som-
SET [GLOBAL | SESSION] group_concat_max_len = value; value: It is the new value set to the variable.>