MySQL | Group_CONCAT() funkcija
Funkcija GROUP_CONCAT() MySQL sistemoje naudojama duomenims iš kelių eilučių sujungti į vieną lauką. Tai yra agregacinė (GROUP BY) funkcija, kuri grąžina a Styga reikšmė, jei grupėje yra bent vienas ne NULL vertė. Priešingu atveju jis grįžta NULL .
Sintaksė:
SELECT col1, col2, ..., colN GROUP_CONCAT ( [DISTINCT] col_name1 [ORDER BY clause] [SEPARATOR str_val] ) FROM table_name GROUP BY col_name2;
Parametrai:
- 1 stulpelis, 2 stulpelis, ... stulpelis: Tai yra lentelės stulpelių pavadinimai.
- stulpelio_vardas1: Lentelės stulpelis, kurio reikšmės yra sujungtos į vieną kiekvienos grupės lauką.
- lentelės_pavadinimas: Lentelės pavadinimas.
- stulpelio_vardas2: Lentelės stulpelis, pagal kurį atliekamas grupavimas.
Įvairių sąlygų naudojimas viduje GROUP_CONCAT() funkcija
- Išskirtinis: Tai pašalina verčių pasikartojimą iš rezultato.
- Rūšiuoti pagal: Jis surūšiuoja grupės reikšmes tam tikra tvarka ir tada jas sujungia.
- Atskyriklis: Pagal numatytuosius nustatymus grupės reikšmės yra atskirtos ( , ) operatorius. Norint pakeisti šią skyriklio reikšmę, naudojama skyriklio sąlyga, po kurios rašomas eilutės literalas. Jis pateikiamas kaip Skiriklis „str_value“ .
Pavyzdžiai:
Apsvarstykite darbuotojų lentelę:
| emp_id | fvardas | vardas | dept_id | jėga |
|---|---|---|---|---|
| 1 | mukešas | gupta | 2 | Vadovavimas |
| 3 | neelam | sharma | 3 | Sunkiai dirbantis |
| 1 | mukešas | gupta | 2 | Atsakingas |
| 2 | Devesh | tyagi | 2 | Punktualumas |
| 3 | neelam | sharma | 3 | Motyvuotas |
| 1 | mukešas | gupta | 2 | Greitas mokinys |
| 4 | keshav | singalas | 3 | Klausymas |
| 2 | Devesh | tyagi | 2 | Greitas mokinys |
| 5 | paklausti | jain | 1 | Sunkiai dirbantis |
| 4 | keshav | singalas | 3 | Kritinis mąstymas |
| 5 | paklausti | jain | 1 | Orentuotas į tikslą |
Užklausa
1. Naudojant paprastą GROUP_CONCAT() funkciją –
SELECT emp_id, fname, lname, dept_id, GROUP_CONCAT ( strength ) as 'strengths' FROM employee GROUP BY fname;
Išvestis
| emp_id | fvardas | vardas | dept_id | stiprybės |
|---|---|---|---|---|
| 1 | mukešas | gupta | 2 | Vadovaujantis, atsakingas, greitai besimokantis |
| 2 | Devesh | tyagi | 2 | Punktualumas, greitai besimokantis |
| 3 | neelam | sharma | 3 | Darbštus, motyvuotas |
| 4 | keshav | singalas | 3 | Klausymas, kritinis mąstymas |
| 5 | paklausti | jain | 1 | Darbštus, siekiantis tikslo |
2. Naudojant DISTINCT sąlygą –
Užklausa
SELECT dept_id, GROUP_CONCAT ( DISTINCT strength) as 'employees strengths' FROM employee GROUP BY dept_id;
Išvestis
| dept_id | darbuotojų stiprybės |
|---|---|
| 1 | Tikslo siekiantis, darbštus |
| 2 | Vadovavimas, punktualumas, greitas mokymasis, atsakingumas |
| 3 | Kritinis mąstymas, darbštus, įsiklausantis, motyvuotas |
3. ORDER BY sąlygos naudojimas –
Užklausa
SELECT dept_id, GROUP_CONCAT ( DISTINCT emp_id ORDER BY emp_id SEPARATOR ', ') as 'employees ids' FROM employee GROUP BY dept_id;
Čia skyriklis ', ' reikšmes atskirs kableliais ( , ) ir tarpo simbolis.
Išvestis
| dept_id | darbuotojų ID |
|---|---|
| 1 | 5 |
| 2 | 1, 2 |
| 3 | 3. 4 |
Kaip viename lauke sujungti kelias skirtingų stulpelių eilutes?
Iki šiol matėme, kad funkcija GROUP_CONCAT() naudojama kelių eilučių, priklausančių tam pačiam stulpeliui, reikšmėms sugrupuoti. Tačiau naudojant concat () Funkcijos ir group_concat() funkcijos kartu, galime sujungti daugiau nei vieną skirtingų eilučių stulpelio reikšmes į vieną lauką.
Pavyzdys:
Atsižvelgiant į aukščiau pateiktą lentelę, darbuotojas, jei norime rasti darbuotojų jėgą kartu su darbuotojų ID antroje užklausoje, tai rašoma taip:
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;
Paaiškinimas:
Aukščiau pateikta užklausa susideda iš dviejų SELECT teiginiai vidinis ir išorinis.
Vidinis SELECT teiginys-
Užklausa
SELECT dept_id, concat ( emp_id, ':', GROUP_CONCAT ( strength separator ', ' ) ) as 'strengths' FROM employee GROUP BY dept_id, emp_id
Jis sugrupuos darbuotojų lentelės eilutes pagal emp_id. Pirmame gautame stulpelyje rodomas dept_id, antrame stulpelyje rodomas emp_id kartu su stipriųjų pusių sąrašu.
Išvestis vidiniam SELECT teiginiui-
| dept_id | stiprybės |
|---|---|
| 2 | 1: Vadovavimas, atsakingas, greitai besimokantis |
| 2 | 2: punktualumas, greitai besimokantis |
| 3 | 3: Darbštus, motyvuotas |
| 3 | 4: Klausymas, kritinis mąstymas |
| 1 | 5: darbštus, siekiantis tikslo |
Išorinis SELECT sakinys dabar sugrupuos šias eilutes pagal dept_id.
Išvestis
| dept_id | emp-id: stipriosios pusės |
|---|---|
| 1 | 5: darbštus, siekiantis tikslo |
| 2 | 1: lyderystė, atsakingas, greitai besimokantis 2: punktualumas, greitai besimokantis |
| 3 | 3: darbštus, motyvuotas 4: įsiklausantis, kritiškas mąstymas |
Pastaba: Funkcijos GROUP_CONCAT() rezultatas sutrumpinamas iki maksimalaus ilgio t.y 1024 kurį pateikia sistemos kintamasis group_concat_max_len . Tačiau kintamojo group_concat_max_len reikšmę galima pakeisti vykdymo metu naudojant NUSTATYTI komanduoti kaip -
SET [GLOBAL | SESSION] group_concat_max_len = value; value: It is the new value set to the variable.