Funkce GROUP _CONCAT je agregační funkce GROUP BY, která vám umožňuje spojit hodnoty sloupců z více řádků do jednoho pole. Pokud nastavená skupina obsahuje jednu nebo žádnou hodnotu sloupce, vrátí řetězec a vrátí hodnotu NULL, pokud žádnou nelze najít.
Tento tutoriál vás naučí používat funkci MySQL GROUP_CONCAT () ke kombinování řetězců ze skupiny s několika možnostmi.
Základní použití
Jak jsme zmínili, tato funkce vrací výsledek řetězce s hodnotami zřetězených hodnot, které nemají hodnotu null, nebo NULL, pokud žádná neexistuje.
Obecná syntaxe je:
GROUP_CONCAT ([ ODLIŠNÝ ]expr[,expr ...]
[ SEŘADIT PODLE expr
[ ASC | DESC ] [,název_sbírky ...]]
[SEPARATOR str_val])
Vysvětlení
Z výše uvedené syntaxe vidíte, že funkce GROUP_CONCAT používá klauzule a omezení MySQL k určení různých možností:
- ODLIŠNÝ: Klauzule DISTINCT pomáhá odstranit duplicitní hodnoty v nastavené skupině před procesem zřetězení. Zvažte náš návod vysvětlující MySQL DISTINCT, abyste pochopili, jak to funguje.
- SEŘADIT PODLE: Další klauzule je ORDER BY, která pomáhá třídit hodnoty v zadaném pořadí. Pořadí může být buď vzestupné nebo sestupné. Pokud není zadáno žádné pořadí, MySQL formátuje hodnoty ve vzestupném pořadí.
- ODDĚLOVAČ : Tato klauzule nastavuje doslovný řetězec vložený mezi hodnoty skupiny při procesu zřetězení. Ve výchozím nastavení používá MySQL k oddělení hodnot čárku (,).
POZNÁMKA: Výsledek řetězce generovaný funkcí MySQL GROUP_CONCAT () je omezen na délku nastavenou v proměnné group_concat_max_len. Tato hodnota je definována v systému a má výchozí hodnotu 1024. Tuto hodnotu můžete změnit globálně nebo ji nastavit v relaci, kterou potřebujete.
SOUBOR [ GLOBÁLNÍ | ZASEDÁNÍ ]group_concat_max_len= hodnota ;Chcete -li se dozvědět více, zvažte níže uvedenou referenci:
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_group_concat_max_len
Jak to funguje: Příklad
Dovolte mi na jednoduchém příkladu vysvětlit, jak funguje funkce GROUP_CONCAT (). Zvažte tabulku s polem pro CHAR jako:
VYTVOŘIT STŮL concat ( hodnota CHAR );Vložíme hodnoty do tabulky, jak ukazuje následující dotaz:
VLOŽIT DO concat ( hodnota ) HODNOTY ('H'),('A'),('THE'),('THE'),('NEBO');Pokud provedeme základní operaci GROUP_CONCAT s hodnotami v tabulce, dostaneme výsledek řetězce, jak je uvedeno níže:
VYBRAT GROUP_CONCAT ( ODLIŠNÝ hodnota SEŘADIT PODLE hodnota ASC ODDĚLOVAČ'') Z concat ;Výsledná hodnota je:
+ ------------------------------------------------- -------------- +| GROUP_CONCAT ( ODLIŠNÝ hodnota SEŘADIT PODLE hodnota ASC ODDĚLOVAČ'') |
+ ------------------------------------------------- -------------- +
|E H L O|
+ ------------------------------------------------- -------------- +
1řádek v soubor (0,01sek)
Chcete jiný způsob, jak porozumět tomu, co se stalo s výše uvedeným výsledkem?
Začneme odstraněním všech duplicitních hodnot kvůli klauzuli MySQL DISTINCT, která odstraní jeden L.
Dále pokračujeme k OBJEDNÁVÁNÍ vzestupně podle definice v (ASC), která mění řetězec ve formě
AHOJ->EHLONakonec provedeme proces zřetězení pomocí mezery jako oddělovače nastavených hodnot, což má za následek řetězec E H L O z {H, E, L, L O}.
Příklad použití případů
Vezměme si skutečnou databázi a použijte ji k ilustraci, jak můžeme implementovat funkci GROUP_CONCAT (). V tomto příkladu použijeme databázi Sakila a konkrétně tabulku adres z databáze Sakila.
Chcete -li stáhnout databázi pro své příklady, zvažte níže uvedený zdroj:
https://dev.mysql.com/doc/index-other.html
V tabulce adres v databázi Sakila získáte sloupec okresu. Můžeme získat všechny jedinečné okresy oddělené potrubím, jak ukazuje níže uvedený dotaz:
VYBRAT GROUP_CONCAT ( ODLIŠNÝ okres SEŘADIT PODLE okresní SEPARÁTOR'|') Z sakila. adresa OMEZIT 5;Výše uvedený dotaz zobrazí všechny oblasti DISTINCT a uspořádá je ve vzestupném pořadí oddělených rourou.
POZNÁMKA: Funkce GROUP_CONCAT () je agregační funkcí. Proto je nutné zadat příkaz ORDER BY uvnitř funkce a ne v příkazu SELECT.
Závěr
Funkce MySQL GROUP_CONCAT () popsaná v tomto kurzu je užitečná funkce, která vám umožňuje vytvářet jedinečná, tříděná a organizovaná data z tabulky, která může obsahovat duplikáty a neuspořádaná data.
Chcete -li se dozvědět více, zvažte dokumenty nebo naše další výukové programy pro MySQL.