Строковые агрегатные функции SQL

Strokovye Agregatnye Funkcii Sql



Если вы когда-либо имели дело с базами данных SQL, вы, вероятно, знакомы с агрегатными функциями. По сути, это набор функций, которые выполняют вычисления над набором значений и возвращают один результат.

Пример включает такие функции, как 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) КАК сотрудники
ОТ сотрудников
ГРУППИРОВАТЬ ПО отделу;

Это объединяет имена сотрудников и указанный разделитель.

Заключение

В этом уроке мы узнали о функциях агрегирования строк, которые позволяют нам предоставлять список строковых значений и выполнять операцию с одним результирующим строковым значением.