logo

MySQL | Функція Group_CONCAT().

Функція GROUP_CONCAT() у MySQL використовується для об’єднання даних із кількох рядків в одне поле. Це агрегатна функція (GROUP BY), яка повертає a Рядок значення, якщо група містить принаймні один не- НУЛЬ значення. В іншому випадку воно повертається НУЛЬ .

Синтаксис:



рядок до ітн
SELECT col1, col2, ..., colN GROUP_CONCAT ( [DISTINCT] col_name1  [ORDER BY clause] [SEPARATOR str_val] )  FROM table_name GROUP BY col_name2;>

Параметри:

  • col1, col2, ...coln: Це назви стовпців таблиці.
  • col_name1: Стовпець таблиці, значення якого об’єднані в одне поле для кожної групи.
  • table_name: Назва таблиці.
  • col_name2: Стовпець таблиці, за яким проводиться групування.

Використання різних речень всередині GROUP_CONCAT() функція

  • відмінний: Це виключає повторення значень результату.
  • Сортувати за: Він сортує значення групи в певному порядку, а потім об’єднує їх.
  • роздільник: За замовчуванням значення групи розділені символом ( , ) оператор. Щоб змінити значення цього розділювача, використовується речення Separator, за яким слідує рядковий літерал. Подається як Роздільник 'str_value' .

приклади:

Розглянемо таблицю Employee:



emp_id fname lname dept_id сила
1 мукеш гупта 2 Лідерство
3 нілам Шарма 3 Працьовитий
1 мукеш гупта 2 Відповідальний
2 Девеш тяги 2 Пунктуальність
3 нілам Шарма 3 Самомотивований
1 мукеш гупта 2 Швидко навчається
4 кешав сингал 3 Слухання
2 Девеш тяги 2 Швидко навчається
5 запитати джайн 1 Працьовитий
4 кешав сингал 3 Критичне мислення
5 запитати джайн 1 Цілеспрямоване

Запит

1. Використання простої функції GROUP_CONCAT() –

SELECT emp_id, fname, lname, dept_id,  GROUP_CONCAT ( strength ) as 'strengths'  FROM employee  GROUP BY fname;>

Вихід

emp_id fname lname dept_id сильні сторони
1 мукеш гупта 2 Лідерство, відповідальність, швидко навчаюся
2 Девеш тяги 2 Пунктуальність, швидко навчаюся
3 нілам Шарма 3 Працьовитий, самомотивований
4 кешав сингал 3 Аудіювання, критичне мислення
5 запитати джайн 1 Працьовитий, цілеспрямований

2. Використання пропозиції DISTINCT –

Запит

SELECT dept_id,  GROUP_CONCAT ( DISTINCT strength) as 'employees strengths'  FROM employee  GROUP BY dept_id;>

Вихід

dept_id сильні сторони співробітників
1 Цілеспрямований, Працьовитий
2 Лідерство, пунктуальність, швидко навчаюсь, відповідальна
3 Критичне мислення, працьовитий, слухаючий, самовмотивований

3. Використання пропозиції ORDER BY –



Запит

SELECT dept_id,  GROUP_CONCAT ( DISTINCT emp_id ORDER BY emp_id SEPARATOR ', ') as 'employees ids'  FROM employee  GROUP BY dept_id;>

тут, Роздільник ', ' розділить значення комами ( , ) і пробіл.

Вихід

dept_id ідентифікатори співробітників
1 5
2 1, 2
3 3. 4

Як об’єднати кілька рядків різних стовпців в одне поле?

Досі ми бачили використання функції GROUP_CONCAT() для групування значень кількох рядків, які належать одному стовпцю. Але, використовуючи concat() функції та group_concat() разом, ми можемо об’єднати значення кількох стовпців різних рядків в одне поле.

приклад:
Розглянувши наведену вище таблицю працівника, якщо ми хочемо знайти силу співробітників разом із ідентифікатором співробітників у другому запиті, тоді це записується як-

SELECT dept_id, GROUP_CONCAT ( strengths SEPARATOR ' ') as 'emp-id : strengths' FROM (   SELECT dept_id, CONCAT ( emp_id, ':', GROUP_CONCAT(strength SEPARATOR', ') )   as 'strengths'   FROM employee   GROUP BY emp_id  ) as emp  GROUP BY dept_id;>

Пояснення:
Наведений вище запит складається з двох Оператори SELECT внутрішній і зовнішній.

Внутрішній оператор SELECT-

Запит

SELECT dept_id, concat ( emp_id, ':', GROUP_CONCAT ( strength separator ', ' ) ) as 'strengths'  FROM employee  GROUP BY dept_id, emp_id>

Він згрупує рядки таблиці співробітників відповідно до emp_id. Перший отриманий стовпець відображає dept_id, другий стовпець відображає emp_id разом зі списком їхніх сильних сторін.

Вихід для внутрішнього оператора SELECT-

dept_id сильні сторони
2 1: Лідерство, Відповідальність, Швидко навчаюся
2 2: Пунктуальність, Швидке навчання
3 3: Працьовитий, самовмотивований
3 4: Аудіювання, критичне мислення
1 5: Працьовитий, цілеспрямований

Зовнішній оператор SELECT тепер згрупує ці рядки відповідно до dept_id.

Вихід

dept_id emp-id: сильні сторони
1 5: Працьовитий, цілеспрямований
2 1: Лідерство, Відповідальність, Швидко навчаюся 2: Пунктуальність, Швидко навчаюся
3 3: Працьовитий, Самовмотивований 4: Слухання, Критичне мислення

Примітка: Результат функції GROUP_CONCAT() скорочується до максимальної довжини, тобто 1024 яка задана системною змінною group_concat_max_len . Однак значення змінної group_concat_max_len можна змінити під час виконання за допомогою НАБІР команда як-

SET [GLOBAL | SESSION] group_concat_max_len = value;   value:   It is the new value set to the variable.>