Пример включает такие функции, как SUM(), AVG(), COUNT(), MAX и MIN(). Однако в агрегатных функциях SQL вы заметите одну вещь: они ориентированы на числовые операции.
Но знаете ли вы, что существуют агрегатные функции, которые работают со строковыми значениями? В этом уроке мы рассмотрим эти функции, как они работают и как мы можем использовать их в наших базах данных.
ПРИМЕЧАНИЕ. Следует отметить, что большинство функций, обсуждаемых в этом посте, не являются частью стандартного SQL. В результате они являются расширением различных механизмов баз данных, таких как PostgreSQL, SQL Server и т. д.
Что такое строковые агрегатные функции?
Строковые агрегатные функции — это набор функций, которые выполняют операции агрегирования над набором строк внутри группы или строк и возвращают один результат.
В основном мы используем эти функции с предложением GROUP BY для группировки строк на основе определенного столбца, а затем агрегируем строки в каждой группе.
Некоторые распространенные функции агрегирования строк включают в себя:
- GROUP_CONCAT() – PostgreSQL и MySQL
- STRING_AGG — SQL-сервер
- ARRAY_AGG — PostgreSQL
- ЛИСТАГГ – Oracle
Давайте рассмотрим каждую функцию и то, что она обеспечивает.
ГРУПП_КОНКАТ()
Функция GROUP_CONCAT() поддерживается базами данных PostgreSQL и MySQL. Это позволяет нам объединить значения из нескольких строк в одну строку.
Предположим, у нас есть таблица «сотрудники» следующего вида:
СОЗДАТЬ ТАБЛИЦУ сотрудников (сотрудник_id INT AUTO_INCREMENT ПЕРВИЧНЫЙ КЛЮЧ,
первое_имя VARCHAR(50),
фамилия VARCHAR(50),
отдел ВАРЧАР(50)
);
ВСТАВИТЬ В сотрудников (имя, фамилия, отдел) ЗНАЧЕНИЯ
(«Алиса», «Смит», «Отдел кадров»),
(«Боб», «Джонсон», «Маркетинг»),
(«Чарли», «Уилсон», «Финансы»),
(«Дэвид», «Браун», «Продажи»),
(«Ева», «Дэвис», «Инжиниринг»);
Выход:
Если мы хотим определить полное имя сотрудника, взяв имя и объединив его с фамилией, мы можем использовать функцию GROUP_CONCAT(), как показано в следующем примере:
ВЫБИРАТЬотделение,
GROUP_CONCAT(имя, ' ', фамилия) КАК полное_имя
ОТ
сотрудники
ГРУППА ПО
отделение;
В этом случае мы используем функцию для объединения строк из столбцов «first_name» и «last_name», а также пустую строку для добавления пробела к именам.
Здесь содержится список сотрудников каждого отдела.
STRING_AGG
Эта функция аналогична функции GROUP_CONCAT(), но поддерживается только в базе данных SQL Server.
Пример использования выглядит следующим образом:
ВЫБИРАТЬотделение,
STRING_AGG(имя, фамилия, ' ') КАК полное_имя
ОТ
сотрудники
ГРУППА ПО
отделение;
При этом выполняется объединение строк в указанных столбцах с использованием пробела в качестве разделителя.
МАССИВ_AGG
Функция ARRAY_AGG доступна только в базе данных PostgreSQL. Это позволяет нам агрегировать значения в один массив.
Пример следующий:
ВЫБИРАТЬотделение,
ARRAY_AGG(имя_имя) AS список_сотрудников
ОТ
сотрудники
ГРУППА ПО
отделение;
Это должно объединить имя сотрудника в виде массива.
СПИСОКГ()
Функция LISTAGG() доступна только в базе данных Oracle. Это позволяет нам объединить значения в одну строку с указанным разделителем.
Пример следующий:
ВЫБЕРИТЕ отдел, LISTAGG(имя, фамилия, ' ') В ГРУППЕ (ЗАКАЗАТЬ ПО имени сотрудника ASC) КАК сотрудникиОТ сотрудников
ГРУППИРОВАТЬ ПО отделу;
Это объединяет имена сотрудников и указанный разделитель.
Заключение
В этом уроке мы узнали о функциях агрегирования строк, которые позволяют нам предоставлять список строковых значений и выполнять операцию с одним результирующим строковым значением.