GROUP _CONCAT функцията е агрегираща функция GROUP BY, която ви позволява да обединявате стойности на колони от няколко реда в едно поле. Той връща низ, ако групата на наборите съдържа една или без нулева стойност на колоната и връща NULL стойност, ако такава не може да бъде намерена.
Този урок ще ви научи как да използвате функцията MySQL GROUP_CONCAT () за комбиниране на низове от група с няколко опции.
Основно използване
Както споменахме, тази функция връща низов резултат със стойностите на конкатенираните ненулеви стойности или NULL, ако такива не съществуват.
Общият синтаксис е:
GROUP_CONCAT ([ РАЗЛИЧЕН ]expr[,израз ...]
[ ПОДРЕДЕНИ ПО expr
[ ASC | DESC ] [,col_name ...]]
[SEPARATOR str_val])
Обяснение
От горния синтаксис можете да видите, че функцията GROUP_CONCAT използва MySQL клаузи и ограничения, за да посочи различните опции:
- РАЗЛИЧИТЕ: Клаузата DISTINCT помага да се премахнат дублиращите се стойности в зададената група преди процеса на свързване. Помислете за нашия урок, обясняващ MySQL DISTINCT, за да разберете как работи.
- ПОДРЕДЕНИ ПО: Следващата клауза е ORDER BY, която помага за сортиране на стойностите в определен ред. Редът може да бъде възходящ или низходящ. Ако не е посочен ред, MySQL форматира стойностите във възходящ ред.
- СЕПАРАТОР : Тази клауза задава низовия литерал, вмъкнат между стойностите на групата в процеса на конкатенация. По подразбиране MySQL използва запетая (,) за разделяне на стойностите.
ЗАБЕЛЕЖКА: Низовият резултат, генериран от функцията MySQL GROUP_CONCAT (), е ограничен до дължина, зададена в променливата group_concat_max_len. Тази стойност е дефинирана в системата и има стойност по подразбиране 1024. Можете да промените тази стойност глобално или да я зададете в сесията, от която се нуждаете.
КОМПЛЕКТ [ ГЛОБАЛНО | СЕСИЯ ]group_concat_max_len= стойност ;Помислете за справка по -долу, за да научите повече:
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_group_concat_max_len
Как работи: Пример
Позволете ми да използвам прост пример, за да обясня как работи функцията GROUP_CONCAT (). Помислете за таблицата с поле за CHAR като:
СЪЗДАВАЙТЕ ТАБЛИЦА concat ( стойност CHAR );Нека вмъкнем стойности в таблицата, както е показано в заявката по -долу:
ИНСЕРТ ВЪВ concat ( стойност ) СТОЙНОСТИ ('H'),('И'),('THE'),('THE'),('ИЛИ');Ако извършим основна операция GROUP_CONCAT върху стойностите в таблицата, ще получим резултат от низ, както е показано по -долу:
SELECT GROUP_CONCAT ( РАЗЛИЧЕН стойност ПОДРЕДЕНИ ПО стойност ASC СЕПАРАТОР'') ОТ concat ;Получената стойност е:
+ ------------------------------------------------- -------------- +| GROUP_CONCAT ( РАЗЛИЧЕН стойност ПОДРЕДЕНИ ПО стойност ASC СЕПАРАТОР'') |
+ ------------------------------------------------- -------------- +
|E H L O|
+ ------------------------------------------------- -------------- +
1ред в комплект (0,01сек)
Искате ли друг начин да разберете какво се е случило с резултата, даден по -горе?
Започваме с премахване на всички дублирани стойности поради клаузата MySQL DISTINCT, която премахва един L.
След това преминаваме към ORDER BY възходящ ред, както е дефинирано в (ASC), което променя низа под формата на
ЗДРАВЕЙТЕ->EHLOИ накрая, изпълняваме процеса на конкатенация, като използваме интервал като разделител на зададените стойности, което води до низа E H L O от {H, E, L, L O}.
Примерни случаи на използване
Нека вземем реална база данни и да я използваме, за да илюстрираме как можем да реализираме функцията GROUP_CONCAT (). В този пример ще използваме базата данни Sakila и по -специално таблицата с адреси от базата данни Sakila.
Помислете за ресурса по -долу, за да изтеглите базата данни за вашите примери:
https://dev.mysql.com/doc/index-other.html
В таблицата с адреси на базата данни Sakila ще получите колоната с окръг. Можем да отделим всички уникални области с тръба, както е показано в заявката по -долу:
SELECT GROUP_CONCAT ( РАЗЛИЧЕН област ПОДРЕДЕНИ ПО област SEPARATOR'|') ОТ sakila.адрес ОГРАНИЧЕНИЕ 5;Заявката по -горе ще покаже всички области DISTINCT и ще ги подреди във възходящ ред, разделени с тръба.
ЗАБЕЛЕЖКА: Функцията GROUP_CONCAT () е обобщена функция. Следователно е необходимо да посочите оператора ORDER BY вътре във функцията, а не в израза SELECT.
Заключение
Функцията MySQL GROUP_CONCAT (), обсъдена в този урок, е полезна функция, която ви позволява да създавате уникални, сортирани и организирани данни от таблица, която може да съдържа дубликати и неподредени данни.
Помислете за документите или другите ни уроци за MySQL, за да научите повече.