Открыть сервис

Агрегатные функции

Агрегатные функции — это функции в системах управления базами данных (СУБД) и языках программирования, которые выполняют вычисления над набором значений (группой строк) и возвращают одно итоговое значение. Они являются фундаментальным инструментом для анализа данных, позволяя получать обобщённую информацию из таблиц, такую как суммы, средние значения, количества, минимумы и максимумы. В отличие от скалярных функций, которые обрабатывают каждую строку отдельно, агрегатные функции работают с группами строк, объединённых по определённому критерию.

Основные характеристики

Агрегатные функции обычно применяются в запросах к базам данных, чаще всего в сочетании с оператором SELECT и конструкцией GROUP BY. Ключевой особенностью является то, что они игнорируют значения NULL при вычислениях, за исключением функции COUNT(*), которая подсчитывает все строки, включая те, которые содержат NULL. Результат агрегатной функции — это всегда одно значение для каждой группы или для всего набора данных.

Агрегатные функции могут быть встроенными (предопределёнными в СУБД) или пользовательскими (созданными разработчиком). Стандарт SQL (ISO/IEC 9075) определяет набор базовых агрегатных функций, которые поддерживаются большинством реляционных СУБД.

Классификация

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

К наиболее распространённым встроенным агрегатным функциям относятся:

Специализированные и расширенные функции

Многие СУБД (например, PostgreSQL, Oracle, Microsoft SQL Server, MySQL) добавляют собственные агрегатные функции, расширяющие стандартные возможности:

Применение в SQL

Агрегатные функции используются в запросах SELECT для получения сводной информации. Основные правила их применения:

  1. Без GROUP BY: Если агрегатная функция используется без GROUP BY, она обрабатывает все строки таблицы, возвращая одно итоговое значение.

``sql SELECT AVG(price) AS average_price FROM products; ``

  1. С GROUP BY: Функция применяется к каждой группе, образованной значениями столбца, указанного в GROUP BY.

``sql SELECT category, COUNT(*) AS product_count, AVG(price) AS avg_price FROM products GROUP BY category; ``

  1. С HAVING: Условие HAVING используется для фильтрации групп после применения агрегатных функций (аналог WHERE для групп).

``sql SELECT category, AVG(price) AS avg_price FROM products GROUP BY category HAVING AVG(price) > 100; ``

  1. С DISTINCT: Многие агрегатные функции поддерживают ключевое слово DISTINCT внутри себя для учёта только уникальных значений.

``sql SELECT COUNT(DISTINCT city) AS unique_cities FROM customers; ``

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

``sql SELECT * FROM products WHERE price > (SELECT AVG(price) FROM products); ``

Примеры использования

Рассмотрим таблицу employees со столбцами id, name, department, salary.

``sql SELECT department, COUNT(*) AS employee_count FROM employees GROUP BY department; ``

``sql SELECT AVG(salary) AS average_salary FROM employees; ``

``sql SELECT MAX(salary) AS max_salary, MIN(salary) AS min_salary FROM employees WHERE department = 'IT'; ``

``sql SELECT department, SUM(salary) AS total_salary FROM employees GROUP BY department HAVING COUNT(*) > 3; ``

Ограничения и особенности

Агрегатные функции в других языках

Понятие агрегатных функций не ограничивается SQL. Они широко используются в:

История

Концепция агрегатных функций была формализована в ранних версиях SQL (SQL-86, SQL-89) и стала неотъемлемой частью реляционной модели данных. Развитие стандарта SQL (SQL:1999, SQL:2003, SQL:2016) привело к появлению более сложных функций, таких как оконные и аналитические, которые расширили возможности агрегации. В России и мире агрегатные функции стали стандартом де-факто для любой работы с реляционными базами данных, начиная от простых отчётов и заканчивая сложными системами бизнес-аналитики.

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →