Ответ
Агрегирующие функции выполняют вычисление над набором строк и возвращают одно результирующее значение. Они часто используются с оператором GROUP BY.
Основные агрегатные функции:
| Функция | Описание | Пример использования |
|---|---|---|
COUNT() |
Подсчитывает количество строк. COUNT(*) считает все строки, COUNT(column) — не-NULL значения. |
SELECT COUNT(*) FROM orders; |
SUM() |
Вычисляет сумму значений числового столбца. | SELECT SUM(amount) FROM payments WHERE status = 'success'; |
AVG() |
Вычисляет среднее арифметическое значений. | SELECT AVG(rating) FROM product_reviews; |
MAX() / MIN() |
Находит максимальное или минимальное значение в столбце. Работают с числами, датами, строками. | SELECT MIN(price), MAX(price) FROM products; |
GROUP_CONCAT() (MySQL) / STRING_AGG() (PostgreSQL) |
Объединяет строковые значения из группы в одну строку с разделителем. | SELECT department_id, GROUP_CONCAT(employee_name) FROM employees GROUP BY department_id; |
Ключевые моменты и пример с GROUP BY:
-- Пример: средний чек и количество заказов по каждому клиенту
SELECT
customer_id,
COUNT(*) AS order_count, -- Количество заказов клиента
AVG(total_amount) AS avg_order, -- Средняя сумма заказа
SUM(total_amount) AS total_spent -- Общая потраченная сумма
FROM orders
WHERE created_at >= '2024-01-01'
GROUP BY customer_id -- Группировка по клиенту
HAVING COUNT(*) > 5; -- Фильтрация по результату агрегации
Важно:
WHEREфильтрует строки до агрегации.HAVINGфильтрует результаты после агрегации (какWHEREдля сгруппированных данных).- Агрегатные функции игнорируют значения
NULL(кромеCOUNT(*)).