Функция GROUP_CONCAT — сложение разных строк таблицы

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

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

Синтаксис

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

SELECT GROUP_CONCAT(поле) FROM имя_таблицы WHERE условие

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

SELECT GROUP_CONCAT(поле SEPARATOR разделитель) FROM имя_таблицы WHERE условие

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

таблица employees
id
айди
name
имя
age
возраст
salary
зарплата
1user123400
2user225500
3user323500
4user430900
5user527500
6user628900

Пример

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

SELECT GROUP_CONCAT(name) as name FROM employees

Результат выполнения кода:

name
имена
user1,user2,user3,user4,user5,user6

Пример

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

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

Результат выполнения кода:

name
имена
user1+user2+user3+user4+user5+user6

Пример

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

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

Результат выполнения кода:

name
имена
user3,user4,user5

Пример

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

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

Результат выполнения кода:

age
возраст
name
имена
23user1,user2,user3
24user4,user5
25user6

Пример

Поменяем разделитель на '-':

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

Результат выполнения кода:

age
возраст
name
имена
23user1-user2-user3
24user4-user5
25user6

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

  • функцию CONCAT,
    которая складывает строки
  • функцию CONCAT_WS,
    которая складывает строки с разделителем

Что такое функция GROUP_CONCAT в MySQL?

Надежные ответы на вопросы разработчиков

Бесплатный курс собеседования по проектированию систем

Многие кандидаты отклоняются или понижаются в рейтинге из-за плохой успеваемости на собеседовании по проектированию систем. Выделитесь на собеседованиях по проектированию систем и получите работу в 2023 году благодаря этому популярному бесплатному курсу.

GROUP_CONCAT — это функция, которая объединяет/объединяет данные из нескольких строк в одно поле. это GROUP BY функция, которая возвращает строку, если группа содержит хотя бы 1 ненулевое значение, если нет, возвращает нулевое значение.

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

Пункты GROUP_CONCAT:

Имеется 3 пунктов GROUP_CONCAT

  • DISTINCT : Этот пункт исключает повторяющиеся значения в результате.

  • ORDER BY : Это предложение объединяет значения после их сортировки.

  • РАЗДЕЛИТЕЛЬ : В этом предложении значения автоматически разделяются оператором , .

    Если мы хотим разделить значения другим оператором, мы должны передать оператор в строковом литерале.


Пример таблицы «Сотрудники»

emp_id имя_имя фамилия качество dep_id
1 Джордж Умно Хорошо говорит 123
2 Том Руни Хорошо справляется 123
1 Джордж Умно Пунктуальность 123
3 Кларк Джеймс Быстрый рабочий 451
3 Кларк Джеймс Хорошо справляется 451
4 Холм Биллингс Быстрый рабочий 451

Примеры

1. Простой GROUP_CONCAT:

В этом примере качества каждого сотрудника объединяются в одно поле.

 

ВЫБРАТЬ emp_id, first_name, last_name, dep_id,

GROUP_CONCAT(качество) как "качества"

FROM Группа сотрудников по emp_id;

2. Отдельное предложение:

В этом примере объединяются отдельные качества для каждого отдела.

 

SELECT dep_id,

GROUP_CONCAT( ОТЛИЧНОЕ качество)

как "Качества сотрудников"

из группы сотрудников по dep_id;

3. ORDER BY и предложение SEPARATOR:

Здесь разделитель «_» будет разделять значения символом подчеркивания (_) и пробелом до и после «_».

 

SELECT dep_id,

GROUP_CONCAT( DISTINCT emp_id ORDER BY emp_id SEPARATOR' _ ')

как "ID сотрудников"

из группы сотрудников по dep_id;

СВЯЗАННЫЕ ТЕГИ

группа

конкатенация

mysql

статьи

Copyright ©2023 Educative, Inc. Все права защищены

Postgre SQL group_concat | Как работает функция group_concat

Обновлено 29 мая 2023 г.

Функция group_concat в PostgreSQL недоступна, но мы использовали ту же функцию, что и array_agg и array_to_string, чтобы они работали так же, как функция group_concat в PostgreSQL. В PostgreSQL нет функции group_concat, но мы использовали array_agg и array_to_string для работы так же, как group_concat, функция которой доступна в MySQL. Функция Array_agg в PostgreSQL вернет элементы группы массивов, а функция array_to_string объединит все значения массива, используя разделитель, используемый в запросе.

Синтаксис PostgreSQL group_concat

Ниже приведен синтаксис:

 Выберите name_of_column1, name_of_column2, name_of_column3, ….., name_of_columnN array_to_string (array_agg (name_of_column), «разделитель значений») из name_ of_table JOIN условие Группировать по условию; 

Ниже приведено описание параметра:

  • Выберите: Эта операция выбирает значение столбца для объединения с помощью функций array_to_string и array_agg в PostgreSQL.
    Мы можем выбрать как один, так и несколько столбцов с помощью функции array_agg.
  • Имя столбца: Выбор имени столбца в таблице позволяет нам получить и объединить данные этого столбца. Мы достигаем этого, используя функции array_to_string и array_agg в PostgreSQL.
  • Array_to_string: Функция array_to_string в PostgreSQL работает аналогично функции group_concat, используемой в других базах данных. Мы можем использовать эту функцию, используя функцию array_agg в PostgreSQL. Обе функции вместе работают так же, как и функция group_concat.
  • Array_agg: Эта функция в PostgreSQL работает так же, как функция group_concat, которая использовалась в другой базе данных. Эта функция в основном используется для возврата элемента из группы массивов. Эта функция очень важна в PostgreSQL для объединения значений столбцов.
  • Разделитель значений: Это определяется как отдельное значение столбца с помощью разделителя, в основном, мы можем использовать «,», «;» и т. д. для разделения значений столбца с помощью функций array_to_string и array_agg в PostgreSQL.
  • Имя таблицы: Это определяется как выбор имени таблицы, из которой мы получили значения столбца, и объединение данных столбца с помощью функций array_to_string и array_agg в PostgreSQL.
  • Условие соединения: Это определяется как использование условия соединения для объединения данных двух конкретных столбцов таблицы в PostgreSQL. Мы использовали операции соединения с функциями array_to_string и array_agg в PostgreSQL.
  • Группировка по состоянию: Это условие использует функции array_to_string и array_agg в PostgreSQL.

Как функция group_concat работает в PostgreSQL?

  • Функция group_concat недоступна в PostgreSQL, которая была доступна в MySQL. Вместо использования group_concat в PostgreSQL мы используем функции array_to_string и array_agg.
  • Функция Array_agg используется для извлечения элемента массива из таблицы. Используя эту функцию, мы получаем значение элементов массива столбцов.

В приведенном ниже примере показано, что после использования функции array_agg мы можем получить только элементы массива из столбца.

Код:

 выберите id, array_agg(name) из группы stud2 по id;
выберите * из stud2; 

Вывод:

  • На рисунке выше показано, что мы используем функцию array_agg для столбца имени после использования этой функции для столбца имени, она будет отображать только все значения из столбца в формате элемента массива.
  • В первую очередь мы используем функцию array_to_string для объединения значений из столбца таблицы. Мы извлекаем эти значения из элементов массива, используя функцию array_agg в PostgreSQL.
  • Используя функцию Array_to_string и функцию array_agg, мы объединили строки столбцов с помощью разделителя.
  • Разделитель значений очень полезен и важен при использовании функций Array_to_string и array_agg в PostgreSQL.
  • Мы также использовали функцию string_agg для объединения значений столбцов в PostgreSQL. Функция String_agg очень полезна и важна при объединении значений столбцов в PostgreSQL.
  • Нам нужно использовать предложение group by с функцией array_to_string и функцией array_agg в PostgreSQL, если мы не использовали предложение group by, это выдаст ошибку.

Пример ниже показывает, что нам нужно использовать предложение group by с функцией Array_to_string и функцией array_agg в PostgreSQL.

Код:

 выберите имя, array_to_string(array_agg(имя), ',') из stud2;
выберите имя, array_to_string(array_agg(name), ',') из группы stud2 по имени; 

Вывод:

  • В приведенном выше примере, если мы не использовали предложение group by, будет выдана ошибка. После использования group by не будет выдаваться ошибка, будет отображаться конкатенированный вывод значений столбца.

Примеры group_concat в PostgreSQL

Мы используем таблицу group_concat для описания примера функции group_concat в PostgreSQL.

Ниже приведены данные и описание таблицы group_concat.

Код:

 выберите * из group_concat;
\d+ group_concat; 

Выходные данные:

Пример #1

Сгруппируйте concat, используя функцию string_agg.

  • В приведенном ниже примере показано объединение столбцов таблицы с помощью функции string_agg.
  • Мы объединяем столбец name из таблицы group_concat.

Код:

 select string_agg(CAST(name AS varchar), ',') from group_concat;
выберите string_agg(CAST(name AS varchar), ',') из группы group_concat по имени; 

Вывод:

Пример #2

Сгруппировать concat, используя функции array_agg и array_to_string.

  • В приведенном ниже примере показан столбец таблицы concat с использованием функций array_agg и array_to_string в PostgreSQL.
  • Мы объединили столбец name из таблицы group_concat.

Код:

 выберите имя, array_to_string(array_agg(name), ',') из группы group_concat по имени;
выберите имя, array_to_string(array_agg(name), '”') из группы group_concat по имени; 

Вывод:

Пример #3

Группируйте concat для упорядочения каждого столбца с помощью функций array_agg и array_to_string.

  • Пример ниже показывает, что группа concat упорядочивает каждый столбец, используя функции array_agg и array_to_string в PostgreSQL.
  • Мы использовали столбец имени и адреса из таблицы group_concat.

Код:

 выбор адреса, array_to_string(array_agg(имя в порядке имени), '"') из группы group_concat по адресу;
выберите адрес, array_to_string(array_agg(имя в порядке имени), ',') из группы group_concat по адресу; 

Вывод:

Заключение

В PostgreSQL нет такой функции, как group_concat, которая была доступна в MySQL; вместо использования этой функции мы используем функции array_agg и array_to_string.