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.