Learnly
SQL для аналитиков/Глава 6/Урок 2

COUNT, SUM, AVG, MIN, MAX

COUNT, SUM, AVG, MIN, MAX

Пять главных агрегатных функций. Разберём каждую с примерами.

COUNT, количество строк

-- Сколько всего пользователей
SELECT COUNT(*) FROM users;

-- Сколько пользователей с email (NULL не считается!)
SELECT COUNT(email) FROM users;

-- Сколько уникальных городов
SELECT COUNT(DISTINCT city) FROM users;

COUNT(*) vs COUNT(column): COUNT(*) считает все строки включая NULL. COUNT(column), только строки где column не NULL.

SUM, сумма

-- Общая выручка
SELECT SUM(amount) FROM orders;

-- Выручка за январь
SELECT SUM(amount)
FROM orders
WHERE created_at >= '2024-01-01'
  AND created_at < '2024-02-01';

-- Округление результата
SELECT ROUND(SUM(amount), 2) AS total FROM orders;

AVG, среднее значение

-- Средний возраст
SELECT AVG(age) FROM users;

-- Средний чек (округлённый)
SELECT ROUND(AVG(amount), 2) AS avg_order FROM orders;

AVG тоже игнорирует NULL, считает среднее только по непустым значениям.

MIN и MAX, минимум и максимум

-- Самый молодой и старший
SELECT MIN(age) AS youngest, MAX(age) AS oldest
FROM users;

-- Первый и последний заказ
SELECT MIN(created_at) AS first, MAX(created_at) AS last
FROM orders;

-- Диапазон цен
SELECT MIN(price) AS min_price, MAX(price) AS max_price
FROM products;

Комбинируем агрегаты

Можно использовать несколько агрегатов в одном запросе:

SELECT
    COUNT(*)                     AS total_orders,
    COUNT(DISTINCT customer_id)  AS unique_customers,
    SUM(amount)                  AS total_revenue,
    ROUND(AVG(amount), 0)        AS avg_order,
    MIN(amount)                  AS min_order,
    MAX(amount)                  AS max_order
FROM orders
WHERE status = 'completed';

Результат, одна строка с полной статистикой по завершённым заказам.

total_orders | unique_customers | total_revenue | avg_order | min_order | max_order
-------------+-----------------+---------------+-----------+-----------+-----------
        1250 |             487 |    3 456 789  |      2765 |        99 |     89000

💡 Главная мысль: Пять функций покрывают большинство аналитических задач. COUNT считает строки, SUM суммирует, AVG усредняет, MIN/MAX находят крайние значения. Все они игнорируют NULL.