MySQL Group Concat для строк

Mysql Group Concat Strings



Функция GROUP _CONCAT - это агрегатная функция GROUP BY, которая позволяет объединять значения столбцов из нескольких строк в одно поле. Он возвращает строку, если группа набора содержит одно или нулевое значение столбца, и возвращает значение NULL, если ничего не найдено.

В этом руководстве вы узнаете, как использовать функцию MySQL GROUP_CONCAT () для объединения строк из группы с несколькими параметрами.







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

Как мы уже упоминали, эта функция возвращает строковый результат со значениями объединенных ненулевых значений или NULL, если их не существует.



Общий синтаксис:



GROUP_CONCAT ([ ОТЧЕТЛИВЫЙ ]expr[,expr ...]
[ СОРТИРОВАТЬ ПО expr
[ ASC | DESC ] [,col_name ...]]
[СЕПАРАТОР str_val])

Объяснение

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





  1. ОТЧЕТЛИВЫЙ: Предложение DISTINCT помогает удалить повторяющиеся значения в группе set перед процессом конкатенации. Рассмотрим наше руководство, объясняющее 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 ( ценить СИМВОЛ );

Давайте вставим значения в таблицу, как показано в запросе ниже:

ВСТАВЛЯТЬ В concat ( ценить ) ЦЕННОСТИ ('ЧАС'),('А ТАКЖЕ'),('THE'),('THE'),('ИЛИ');

Если мы выполним базовую операцию GROUP_CONCAT со значениями в таблице, мы получим строковый результат, как показано ниже:

ВЫБРАТЬ 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 вы получите столбец района. Мы можем разделить все уникальные районы трубкой, как показано в запросе ниже:

ВЫБРАТЬ GROUP_CONCAT ( ОТЧЕТЛИВЫЙ округ СОРТИРОВАТЬ ПО районный СЕПАРАТОР'|') ИЗ sakila.address LIMIT 5;

Приведенный выше запрос отобразит все ОТЛИЧНЫЕ районы и упорядочит их в порядке возрастания, разделенных вертикальной чертой.

ЗАМЕТКА: Функция GROUP_CONCAT () - это агрегатная функция. Следовательно, необходимо указывать оператор ORDER BY внутри функции, а не в операторе SELECT.

Заключение

Функция MySQL GROUP_CONCAT (), обсуждаемая в этом руководстве, является полезной функцией, которая позволяет вам создавать уникальные, отсортированные и упорядоченные данные из таблицы, которая может содержать дубликаты и неупорядоченные данные.

Чтобы узнать больше, ознакомьтесь с документацией или другими нашими руководствами по MySQL.