Функция GROUP _CONCAT - это агрегатная функция GROUP BY, которая позволяет объединять значения столбцов из нескольких строк в одно поле. Он возвращает строку, если группа набора содержит одно или нулевое значение столбца, и возвращает значение NULL, если ничего не найдено.
В этом руководстве вы узнаете, как использовать функцию MySQL GROUP_CONCAT () для объединения строк из группы с несколькими параметрами.
Основное использование
Как мы уже упоминали, эта функция возвращает строковый результат со значениями объединенных ненулевых значений или NULL, если их не существует.
Общий синтаксис:
GROUP_CONCAT ([ ОТЧЕТЛИВЫЙ ]expr[,expr ...]
[ СОРТИРОВАТЬ ПО expr
[ ASC | DESC ] [,col_name ...]]
[СЕПАРАТОР str_val])
Объяснение
Из приведенного выше синтаксиса вы можете видеть, что функция GROUP_CONCAT использует предложения и ограничения MySQL для определения различных параметров:
- ОТЧЕТЛИВЫЙ: Предложение DISTINCT помогает удалить повторяющиеся значения в группе set перед процессом конкатенации. Рассмотрим наше руководство, объясняющее 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 ( ценить СИМВОЛ );Давайте вставим значения в таблицу, как показано в запросе ниже:
ВСТАВЛЯТЬ В 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.