logo

MySQL | Funkce Group_CONCAT().

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