Агрегатные функции вычисляют одно значение из набора строк — COUNT, SUM, AVG, MIN, . Они необходимы для суммирования данных (итоги, средние значения, количества), особенно в сочетании с .
Агрегатные функции вычисляют одно значение из набора строк — COUNT, SUM, AVG, MIN, . Они необходимы для суммирования данных (итоги, средние значения, количества), особенно в сочетании с .
MAXGROUP BYSELECT
COUNT(*) AS total_rows, -- count all rows
COUNT(email) AS rows_with_email, -- count NON-NULL emails (ignores NULLs!)
SUM(amount) AS total_amount, -- sum of a column
AVG(price) AS average_price, -- average
MIN(price) AS lowest, -- minimum
MAX(price) AS highest -- maximum
FROM orders;
Каждая функция сводит много строк в одно значение. SUM/AVG работают с числами; MIN/MAX — с числами, датами или текстом; COUNT — с любыми данными.
COUNT(*) -- counts ALL rows (including those with NULLs)
COUNT(email) -- counts only rows where email is NOT NULL
COUNT(DISTINCT country) -- counts UNIQUE non-null values
COUNT(*) считает все строки, но COUNT(column) считает только строки, где этот столбец не NULL — тонкое, но важное различие. COUNT(DISTINCT col) считает уникальные значения.
-- aggregate PER GROUP instead of the whole table
SELECT country, COUNT(*) AS users, AVG(age) AS avg_age
FROM users
GROUP BY country; -- one result row per country
-- → for each country: how many users and their average age
Без GROUP BY агрегат суммирует всё в одну строку. С GROUP BY он производит одну строку резюме для каждой группы — типичное и мощное использование.
-- ❌ ERROR — can't mix an aggregate with a non-grouped column
SELECT name, COUNT(*) FROM users; -- which name? ambiguous
-- ✅ either group by it, or only select aggregates
SELECT country, COUNT(*) FROM users GROUP BY country;
Агрегатные функции необходимы для суммирования и анализа данных — вычисление итогов, средних значений, количеств и экстремумов — постоянная потребность в отчётах, аналитике, панелях управления и логике приложений, поэтому их понимание является основополагающим знанием SQL.
Знание основных функций (COUNT, SUM, AVG, MIN, MAX) и того, как они сводят наборы строк в одно значение, необходимо для любого суммирования данных.
Важный и часто неправильно понимаемый нюанс — различие между COUNT(*) и COUNT(column) (COUNT(*) считает все строки, COUNT(column) считает только значения, не равные NULL — что может дать различные, неожиданные результаты), а также COUNT(DISTINCT) для уникальных значений.
Наиболее мощно агрегаты объединяются с GROUP BY для создания резюме по группам (количество/средние значения по категориям) — основания аналитических запросов.
Понимание ошибки о том, что вы не можете смешивать агрегаты с негруппированными столбцами (распространённая ошибка), также важно.
Поскольку суммирование данных — повсеместная задача базы данных (каждый отчёт, панель управления и аналитический запрос использует агрегаты), и поскольку понимание функций, нюансов COUNT и, особенно, их сочетания с GROUP BY является основным для анализа данных в SQL, овладение агрегатными функциями — это основное, часто применяемое знание, необходимое для работы с данными — соединяющее базовые запросы и аналитическую, суммирующую мощь, которая делает SQL ценным для отчётов и получения информации.