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