Функція 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.>