Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

Объединение строк с GROUP BY и CONCAT в MySQL

Быстрый ответ

Для группировки строк в MySQL используйте функцию GROUP_CONCAT().

Пример запроса:

SQL
Скопировать код
SELECT employee_department, GROUP_CONCAT(employee_name SEPARATOR ', ')
FROM employees 
GROUP BY employee_department;

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

Кинга Идем в IT: пошаговый план для смены профессии

Подробное рассмотрение GROUP_CONCAT

Обзор GROUP_CONCAT

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

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Управление разделителями при помощи GROUP_CONCAT

Опция SEPARATOR в GROUP_CONCAT() позволяет определить разделитель между объединяемыми строками. Это может быть запятая ,, пробел ` или даже перевод строки\n`. Если разделитель не указан, MySQL по умолчанию использует запятую.

Пример:

SQL
Скопировать код
SELECT id, GROUP_CONCAT(name SEPARATOR ' ') 
FROM table 
GROUP BY id;

Обработка значений NULL

GROUP_CONCAT() вернёт NULL, если все строки в группе имеют значение NULL. Если же среди строк сущетсвуют NULL значения, они будут пропущены и не войдут в итоговую строку.

Синтаксис GROUP_CONCAT

Понимание синтаксиса GROUP_CONCAT() важно для формулирования более сложных запросов:

Markdown
Скопировать код
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])

Преодоление ограничений на длину строки в GROUP_CONCAT

Если результат, полученный с помощью GROUP_CONCAT(), сокращён до 1024 символов, то вы можете увеличить значение системной переменной group_concat_max_len.

Визуализация

Давайте сравним применение GROUP BY в MySQL со сборкой пазла:

Markdown
Скопировать код
| До использования GROUP BY               | После применения GROUP BY и GROUP_CONCAT |
| ------------------------------------ | ---------------------------------------- |
| 🧩 Элемент: "Джон"                     | Собранная картинка: "Джон, Алиса"         |
| 🧩 Элемент: "Алиса"                    |

Собираем отдельные элементы в одно целое, используя GROUP BY и GROUP_CONCAT:

SQL
Скопировать код
SELECT group_field, GROUP_CONCAT(string_field SEPARATOR ', ')
FROM your_table
GROUP BY group_field;

Так, мы формируем упорядоченную последовательность данных.

Продвинутое применение GROUP_CONCAT

Применение DISTINCT в функции GROUP_CONCAT

Ключевое слово DISTINCT позволяет выбрать только уникальные значения, исключая дубликаты.

SQL
Скопировать код
SELECT employee_department, GROUP_CONCAT(DISTINCT employee_name SEPARATOR ', ') 
FROM employees 
GROUP BY employee_department;

Использование ORDER BY внутри функции GROUP_CONCAT

Сортируйте элементы функции GROUP_CONCAT() используя ORDER BY:

SQL
Скопировать код
SELECT employee_department, 
GROUP_CONCAT(employee_name ORDER BY employee_name SEPARATOR ', ') 
FROM employees 
GROUP BY employee_department;

Совместное использование JOIN и GROUP_CONCAT

Применяйте GROUP_CONCAT() вместе с JOIN для формирования сложных запросов, включающих данные из нескольких таблиц:

SQL
Скопировать код
SELECT dept.name, GROUP_CONCAT(emp.name ORDER BY emp.name SEPARATOR ', ')
FROM departments dept
LEFT JOIN employees emp ON emp.department_id = dept.id
GROUP BY dept.name;

Полезные материалы

  1. MySQL :: MySQL 8.0 Reference Manual :: 12.19.1 Aggregate Function Descriptions — официальная документация по функции GROUP_CONCAT.
  2. MySQL GROUP_CONCAT power — детальное рассмотрение возможностей функции GROUP_CONCAT.
  3. MySQL group_concat() function overview — комплексный обзор функции GROUP_CONCAT и её практическое применение.
  4. Avoid GROUP_CONCAT truncation — способы обхода ограничения на длину строки в функции GROUP_CONCAT.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какую функцию в MySQL следует использовать для объединения строк в группы?
1 / 5