logo

MySQL | Funkcia Group_CONCAT().

Funkcia GROUP_CONCAT() v MySQL sa používa na zreťazenie údajov z viacerých riadkov do jedného poľa. Toto je agregovaná funkcia (GROUP BY), ktorá vracia a Reťazec hodnota, ak skupina obsahuje aspoň jeden NULOVÝ hodnotu. V opačnom prípade sa vráti NULOVÝ .

Syntax:



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

Parametre:

  • stĺpec1, stĺpec2, ... stĺpec: Toto sú názvy stĺpcov tabuľky.
  • názov_stĺpca1: Stĺpec tabuľky, ktorého hodnoty sú pre každú skupinu zreťazené do jedného poľa.
  • table_name: Názov tabuľky.
  • názov_stĺpca2: Stĺpec tabuľky, podľa ktorého sa robí zoskupenie.

Použitie rôznych doložiek vo vnútri GROUP_CONCAT() funkciu

  • Odlišný: Z výsledku eliminuje opakovanie hodnôt.
  • Zoradiť podľa: Zoradí hodnoty skupiny v konkrétnom poradí a potom ich zreťazí.
  • Oddeľovač: Štandardne sú hodnoty skupiny oddelené znakom ( , ) operátor. Na zmenu tejto hodnoty oddeľovača sa používa klauzula Separator, za ktorou nasleduje reťazcový literál. Udáva sa ako Oddeľovač „str_value“ .

Príklady:

Uvažujme o tabuľke zamestnancov:



emp_id meno meno dept_id silu
1 mukesh gupta 2 Vedenie
3 neelam šarma 3 Ťažko pracujúci
1 mukesh gupta 2 Zodpovedný
2 Devesh tyagi 2 Dochvíľnosť
3 neelam šarma 3 Vlastná motivácia
1 mukesh gupta 2 Rýchlo sa učiaci
4 kešav singhal 3 Počúvanie
2 Devesh tyagi 2 Rýchlo sa učiaci
5 opýtať sa jain 1 Ťažko pracujúci
4 kešav singhal 3 Kritické myslenie
5 opýtať sa jain 1 Cieľavedomý

Dopyt

1. Použitie jednoduchej funkcie GROUP_CONCAT() –

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

Výkon

emp_id meno meno dept_id silné stránky
1 mukesh gupta 2 Vedenie, zodpovednosť, rýchlo sa učí
2 Devesh tyagi 2 Presnosť, rýchle učenie
3 neelam šarma 3 Pracovitý, Sebamotivovaný
4 kešav singhal 3 Počúvanie, kritické myslenie
5 opýtať sa jain 1 Pracovitý, cieľavedomý

2. Použitie klauzuly DISTINCT –

Dopyt

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

Výkon

dept_id silné stránky zamestnancov
1 Cieľavedomý, usilovný
2 Vedenie, dochvíľnosť, rýchlo sa učiť, zodpovedný
3 Kritické myslenie, Pracovitý, Počúvajúci, Sebamotivovaný

3. Použitie klauzuly ORDER BY –



Dopyt

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

Tu, Oddeľovač ‘, ‘ oddelí hodnoty čiarkou ( , ) a znak medzery.

Výkon

dept_id ID zamestnancov
1 5
2 1, 2
3 3. 4

Ako spojiť viacero riadkov rôznych stĺpcov do jedného poľa?

Doteraz sme videli použitie funkcie GROUP_CONCAT() na zoskupenie hodnôt viacerých riadkov, ktoré patria do rovnakého stĺpca. Ale pomocou concat() funkcie a group_concat() spolu, môžeme kombinovať viac ako jeden stĺpec hodnôt rôznych riadkov do jedného poľa.

Príklad:
Vzhľadom na vyššie uvedenú tabuľku zamestnanec, ak chceme nájsť silu zamestnancov spolu s ID zamestnancov v druhom dotaze, potom je to napísané ako-

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;>

Vysvetlenie:
Vyššie uvedený dotaz pozostáva z dvoch SELECT príkazy vnútorný a vonkajší.

Vnútorný príkaz SELECT-

Dopyt

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

Zoskupí riadky tabuľky zamestnancov podľa emp_id. Prvý výsledný stĺpec zobrazuje dept_id, druhý stĺpec zobrazuje emp_id spolu so zoznamom ich silných stránok.

Výkon pre vnútorný príkaz SELECT-

dept_id silné stránky
2 1: Vedenie, zodpovednosť, rýchlo sa učí
2 2: Presnosť, rýchle učenie
3 3: Pracovitý, Sebamotivovaný
3 4: Počúvanie, kritické myslenie
1 5: Pracovitý, cieľavedomý

Vonkajší príkaz SELECT teraz zoskupí tieto riadky podľa dept_id.

Výkon

dept_id emp-id: silné stránky
1 5: Pracovitý, cieľavedomý
2 1: Vedenie, zodpovednosť, rýchlo sa učiť 2: Dochvíľnosť, rýchlo sa učiť
3 3: Pracovitý, sebamotivovaný 4: Počúvanie, kritické myslenie

Poznámka: Výsledok funkcie GROUP_CONCAT() je skrátený na maximálnu dĺžku, t.j 1024 ktorá je daná systémovou premennou group_concat_max_len . Hodnotu premennej group_concat_max_len je však možné za behu zmeniť pomocou SET príkaz ako-

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