Ответ
Агрегатные функции выполняют вычисление на наборе строк и возвращают одно значение. Они часто используются с предложением GROUP BY.
Основные агрегатные функции (стандарт SQL):
-
COUNT()- подсчитывает количество строк.COUNT(*)считает все строки, включая NULL.COUNT(column)считает только не-NULL значения в указанном столбце.-- Общее количество заказов SELECT COUNT(*) AS total_orders FROM orders; -- Количество заказов с указанным идентификатором клиента SELECT COUNT(customer_id) FROM orders; -- Количество уникальных клиентов, сделавших заказы SELECT COUNT(DISTINCT customer_id) FROM orders;
-
SUM()- вычисляет сумму значений в числовом столбце.SELECT SUM(quantity * unit_price) AS total_revenue FROM order_details; -
AVG()- вычисляет среднее арифметическое значений.SELECT AVG(salary) AS average_salary FROM employees WHERE department = 'Engineering'; -
MIN()/MAX()- находят минимальное и максимальное значение.SELECT MIN(price) AS cheapest, MAX(price) AS most_expensive FROM products;
Важные особенности и работа с GROUP BY:
- Агрегатные функции игнорируют NULL значения (кроме
COUNT(*)). GROUP BYгруппирует строки с одинаковыми значениями, и агрегация применяется к каждой группе отдельно.HAVINGиспользуется для фильтрации результатов после агрегации, в отличие отWHERE, который фильтрует строки до.
-- Пример: средний чек по каждому клиенту, у кого было больше 5 заказов
SELECT
customer_id,
COUNT(*) AS order_count,
AVG(total_amount) AS avg_order_value
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5; -- Фильтрация по результату агрегации
Специфичные для СУБД функции (примеры):
- PostgreSQL/MySQL:
STRING_AGG()/GROUP_CONCAT()- объединяет строковые значения из группы в одну строку с разделителем. - Статистические:
STDDEV()(стандартное отклонение),VARIANCE()(дисперсия). - Для работы с битами:
BIT_AND(),BIT_OR().