От автора code.mu: РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
60 of 150 menu

Функция GROUP_CONCAT

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

У этой функции есть ограничение на объем выводимых данных. По умолчанию 1024 символа для каждого объединения - для каждой выводимой строки. Если размер склеенных данных больше, то он будет урезаться. Чтобы расширить размер нужно выполнить команду SET group_concat_max_len = 4096; Если у вас есть привилегии, то вы расширите объем получаемых данных до 4096, можно и больше. Но чаще всего на обычных хостингах таких привилегий нет.

Синтаксис

Без указания разделителя (по умолчанию это будет запятая):

SELECT GROUP_CONCAT(field) FROM table_name WHERE condition

С указанием разделителя:

SELECT GROUP_CONCAT(field SEPARATOR separator) FROM table_name WHERE condition

Таблицы для примеров

employees
id name age salary
1 user1 23 400
2 user2 25 500
3 user3 23 500
4 user4 30 900
5 user5 27 500
6 user6 28 900

Пример

Давайте найдём все имена из таблицы и выведем их через запятую:

SELECT GROUP_CONCAT(name) AS name FROM employees

Результат выполнения SQL запроса:

name
user1,user2,user3,user4,user5,user6

Пример

Давайте изменим разделитель на '+' с помощью команды SEPARATOR:

SELECT GROUP_CONCAT(name SEPARATOR '+') AS name FROM employees

Результат выполнения SQL запроса:

name
user1+user2+user3+user4+user5+user6

Пример

Давайте с помощью команды WHERE выберем не все строки, а только заданные:

SELECT GROUP_CONCAT(name) AS name FROM employees WHERE id >= 3 AND id <= 5

Результат выполнения SQL запроса:

name
user3,user4,user5

Пример

Давайте с помощью команды GROUP BY сгруппируем строки по возрасту и для каждой группы выведем через запятую имена работников с таким возрастом:

SELECT age, GROUP_CONCAT(name) AS name FROM employees GROUP BY age

Результат выполнения SQL запроса:

age name
23 user1,user3
25 user2
27 user5
28 user6
30 user4

Пример

Давайте поменяем разделитель на '-':

SELECT age, GROUP_CONCAT(name SEPARATOR '-') AS name FROM employees GROUP BY age

Результат выполнения SQL запроса:

age name
23 user1-user3
25 user2
27 user5
28 user6
30 user4

Смотрите также

  • функцию CONCAT,
    которая складывает строки
  • функцию CONCAT_WS,
    которая складывает строки с разделителем
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить