Funkce GROUP_CONCAT() v MySQL se používá ke zřetězení dat z více řádků do jednoho pole. Toto je agregační funkce (GROUP BY), která vrací a Tětiva hodnota, pokud skupina obsahuje alespoň jeden NULA hodnota. Jinak se to vrací NULA .
Syntax:
SELECT col1, col2, ..., colN GROUP_CONCAT ( [DISTINCT] col_name1 [ORDER BY clause] [SEPARATOR str_val] ) FROM table_name GROUP BY col_name2;>
Parametry:
markýza html
- col1, col2, ...colN: Toto jsou názvy sloupců tabulky.
- název_sloupce1: Sloupec tabulky, jehož hodnoty jsou zřetězeny do jednoho pole pro každou skupinu.
- název_tabulky: Název tabulky.
- název_sloupce2: Sloupec tabulky, podle kterého se seskupení provádí.
Použití různých klauzulí uvnitř GROUP_CONCAT() funkce
- Odlišný: Eliminuje opakování hodnot z výsledku.
- Seřadit podle: Seřadí hodnoty skupiny v určitém pořadí a poté je zřetězí.
- Oddělovač: Ve výchozím nastavení jsou hodnoty skupiny odděleny ( , ) operátor. Ke změně této hodnoty oddělovače se používá klauzule Separator následovaná řetězcovým literálem. Je dáno jako Oddělovač ‘str_value’ .
Příklady:
Uvažujme o tabulce zaměstnanců:
| emp_id | jméno | jméno | dept_id | síla |
|---|---|---|---|---|
| 1 | mukesh | gupta | 2 | Vedení lidí |
| 3 | neelam | šarma | 3 | Těžce pracující |
| 1 | mukesh | gupta | 2 | Odpovědný |
| 2 | Devesh | tyagi | 2 | Dochvilnost |
| 3 | neelam | šarma | 3 | Sebemotivovaný |
| 1 | mukesh | gupta | 2 | Učenlivá |
| 4 | kešav | singhal | 3 | Naslouchání |
| 2 | Devesh | tyagi | 2 | Učenlivá |
| 5 | dotázat se | jain | 1 | Těžce pracující |
| 4 | kešav | singhal | 3 | Kritické myšlení |
| 5 | dotázat se | jain | 1 | Zaměřený na cíl |
Dotaz
1. Použití jednoduché funkce GROUP_CONCAT() –
SELECT emp_id, fname, lname, dept_id, GROUP_CONCAT ( strength ) as 'strengths' FROM employee GROUP BY fname;>
Výstup
| emp_id | jméno | jméno | dept_id | silné stránky |
|---|---|---|---|---|
| 1 | mukesh | gupta | 2 | Vedení, zodpovědný, rychle se učící |
| 2 | Devesh | tyagi | 2 | Dochvilnost, rychlé učení |
| 3 | neelam | šarma | 3 | Pracovitý, sebemotivovaný |
| 4 | kešav | singhal | 3 | Naslouchání, kritické myšlení |
| 5 | dotázat se | jain | 1 | Pracovitý, cílevědomý |
2. Použití klauzule DISTINCT –
imessage hry na android
Dotaz
SELECT dept_id, GROUP_CONCAT ( DISTINCT strength) as 'employees strengths' FROM employee GROUP BY dept_id;>
Výstup
| dept_id | silné stránky zaměstnanců |
|---|---|
| 1 | Cílevědomý, pracovitý |
| 2 | Vedení, dochvilnost, rychle se učící, zodpovědná |
| 3 | Kritické myšlení, Pracovitý, Naslouchající, Sebemotivovaný |
3. Použití doložky ORDER BY –
Dotaz
SELECT dept_id, GROUP_CONCAT ( DISTINCT emp_id ORDER BY emp_id SEPARATOR ', ') as 'employees ids' FROM employee GROUP BY dept_id;>
Tady, Oddělovač ‘, ‘ oddělí hodnoty čárkou ( , ) a znak mezery.
Výstup
| dept_id | ID zaměstnanců |
|---|---|
| 1 | 5 |
| 2 | 1, 2 |
| 3 | 3. 4 |
Jak zřetězit více řádků různých sloupců do jednoho pole?
Doposud jsme viděli použití funkce GROUP_CONCAT() k seskupení hodnot více řádků, které patří do stejného sloupce. Ale pomocí spojit() funkce a group_concat() společně, můžeme kombinovat více než jeden sloupec hodnot různých řádků do jednoho pole.
Příklad:
Vzhledem k výše uvedené tabulce zaměstnanec, pokud chceme najít sílu zaměstnanců spolu s id zaměstnance v druhém dotazu, pak se zapíše jako-
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;>
Vysvětlení:
Výše uvedený dotaz se skládá ze dvou příkazy SELECT vnitřní a vnější.
Vnitřní příkaz SELECT-
Dotaz
SELECT dept_id, concat ( emp_id, ':', GROUP_CONCAT ( strength separator ', ' ) ) as 'strengths' FROM employee GROUP BY dept_id, emp_id>
Seskupí řádky tabulky zaměstnanců podle emp_id. První výsledný sloupec zobrazuje dept_id, druhý sloupec zobrazuje emp_id spolu s jejich seznamem silných stránek.
slf4j vs log4j
Výstup pro vnitřní příkaz SELECT-
| dept_id | silné stránky |
|---|---|
| 2 | 1: Vedení, Zodpovědnost, Rychle se učící |
| 2 | 2: Dochvilnost, rychlé učení |
| 3 | 3: Pracovitý, Sebemotivovaný |
| 3 | 4: Naslouchání, kritické myšlení |
| 1 | 5: Pracovitý, cílevědomý |
Vnější příkaz SELECT nyní seskupí tyto řádky podle dept_id.
Výstup
| dept_id | emp-id: silné stránky |
|---|---|
| 1 | 5: Pracovitý, cílevědomý |
| 2 | 1: Vedení, Zodpovědnost, Rychle se učit 2: Dochvilnost, Rychle se učit |
| 3 | 3: Tvrdě pracující, sebemotivovaný 4: Naslouchání, kritické myšlení |
Poznámka: Výsledek funkce GROUP_CONCAT() je zkrácen na maximální délku, tj 1024 která je dána systémovou proměnnou group_concat_max_len . Hodnotu proměnné group_concat_max_len lze však za běhu změnit pomocí SOUBOR příkaz jako-
SET [GLOBAL | SESSION] group_concat_max_len = value; value: It is the new value set to the variable.>