MySQL Group Concat за низове

Mysql Group Concat Strings



GROUP _CONCAT функцията е агрегираща функция GROUP BY, която ви позволява да обединявате стойности на колони от няколко реда в едно поле. Той връща низ, ако групата на наборите съдържа една или без нулева стойност на колоната и връща NULL стойност, ако такава не може да бъде намерена.

Този урок ще ви научи как да използвате функцията MySQL GROUP_CONCAT () за комбиниране на низове от група с няколко опции.







Основно използване

Както споменахме, тази функция връща низов резултат със стойностите на конкатенираните ненулеви стойности или NULL, ако такива не съществуват.



Общият синтаксис е:



GROUP_CONCAT ([ РАЗЛИЧЕН ]expr[,израз ...]
[ ПОДРЕДЕНИ ПО expr
[ ASC | DESC ] [,col_name ...]]
[SEPARATOR str_val])

Обяснение

От горния синтаксис можете да видите, че функцията GROUP_CONCAT използва MySQL клаузи и ограничения, за да посочи различните опции:





  1. РАЗЛИЧИТЕ: Клаузата DISTINCT помага да се премахнат дублиращите се стойности в зададената група преди процеса на свързване. Помислете за нашия урок, обясняващ MySQL DISTINCT, за да разберете как работи.
  2. ПОДРЕДЕНИ ПО: Следващата клауза е ORDER BY, която помага за сортиране на стойностите в определен ред. Редът може да бъде възходящ или низходящ. Ако не е посочен ред, MySQL форматира стойностите във възходящ ред.
  3. СЕПАРАТОР : Тази клауза задава низовия литерал, вмъкнат между стойностите на групата в процеса на конкатенация. По подразбиране 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, за да научите повече.