Перш ніж заплутатись у синтаксисі SQL і змінних, давай згадаємо: агрегатні функції — це твої найкращі друзі для підрахунку всього підряд. Вони допомагають рахувати сумарні дані, середні значення і творити іншу магію на великій кількості рядків.
Агрегатні функції використовують для виконання математичних операцій над групами рядків. Основні з них:
SUM(): рахує суму значень.AVG(): обчислює середнє значення.COUNT(): рахує кількість рядків у вибірці.
Агрегатні функції корисні, коли ти працюєш з великими обсягами даних і хочеш отримати короткий звіт: скільки у тебе замовлень, який їхній загальний обсяг, або який найбільший чек був сьогодні. Давай розглянемо кілька агрегатних функцій.
Підрахунок рядків: функція COUNT()
Функція COUNT() дозволяє порахувати кількість рядків у таблиці. Розберемо її роботу на прикладах.
-- Простий підрахунок всіх рядків у таблиці замовлень
SELECT COUNT(*) AS total_orders
FROM orders;
-- Підрахунок унікальних клієнтів
SELECT COUNT(DISTINCT customer_id) AS unique_customers
FROM orders;
-- Підрахунок замовлень, у яких сума більше 100
SELECT COUNT(*) AS high_value_orders
FROM orders
WHERE total_amount > 100;
Функція COUNT() часто використовується для підрахунку записів, унікальних значень, а також у комбінації з фільтрацією, наприклад, "скільки студентів записались на курси по Python".
Підсумовування даних: функція SUM()
Функція SUM() рахує суму значень у стовпці. Давай тепер порахуємо суму всіх покупок клієнтів.
-- Підрахунок загальної виручки
SELECT SUM(total_amount) AS total_revenue
FROM orders;
-- Сума покупок конкретного клієнта
SELECT SUM(total_amount) AS customer_spending
FROM orders
WHERE customer_id = 101;
-- Сума замовлень по категоріях
SELECT category, SUM(total_amount) AS category_revenue
FROM orders
GROUP BY category;
SUM() — це головний інструмент для аналітики продажів, виручки і будь-яких інших сум. Наприклад, треба дізнатись доходи бізнес-центру за останній місяць? Легко.
Середні значення: функція AVG()
Функція AVG() допомагає порахувати середнє значення по набору даних. Наприклад, середня оцінка студентів або середній чек клієнта.
-- Середня сума замовлення
SELECT AVG(total_amount) AS average_order_value
FROM orders;
-- Середня сума замовлень по категоріях
SELECT category, AVG(total_amount) AS average_order_value
FROM orders
GROUP BY category;
-- Середній чек клієнтів за останні 7 днів
SELECT AVG(total_amount) AS avg_check_last_week
FROM orders
WHERE order_date >= NOW() - INTERVAL '7 days';
Середнє значення корисне для аналізу якості обслуговування, виявлення аномалій і розрахунку ключових метрик, типу середнього прибутку на клієнта.
Використання агрегатних функцій в аналітиці
Тепер, коли ми знайомі з основними функціями, давай подивимось, як їх використовувати для створення базових аналітичних звітів.
Приклад 1: загальна виручка і кількість замовлень
Припустимо, ти хочеш дізнатись, скільки замовлень було зроблено і яка загальна виручка за місяць.
SELECT
COUNT(*) AS total_orders,
SUM(total_amount) AS total_revenue
FROM orders
WHERE order_date >= '2023-10-01' AND order_date <= '2023-10-31';
Приклад 2: середня виручка по категоріях
А якщо захочемо розбити виручку по категоріях товарів?
SELECT
category,
COUNT(*) AS total_orders,
SUM(total_amount) AS total_revenue,
AVG(total_amount) AS avg_order_value
FROM orders
GROUP BY category;
Приклад 3: замовлення за останні 7 днів
Часто треба аналізувати метрики за короткі періоди, наприклад, за останній тиждень.
SELECT
COUNT(*) AS orders_last_week,
SUM(total_amount) AS revenue_last_week,
AVG(total_amount) AS avg_check_last_week
FROM orders
WHERE order_date >= NOW() - INTERVAL '7 days';
Практичні кейси з конкретними задачами
Задача: Аналіз продажів по регіонах
Припустимо, ти власник мережі магазинів і хочеш аналізувати, як розподілилась виручка по регіонах.
SELECT
region,
COUNT(*) AS total_orders,
SUM(total_amount) AS total_revenue,
AVG(total_amount) AS average_order_value
FROM orders
GROUP BY region
ORDER BY total_revenue DESC;
Задача: Топ-10 клієнтів по виручці
Тепер додамо трохи логіки, щоб виділити топ-10 клієнтів по загальній сумі замовлень.
SELECT
customer_id,
SUM(total_amount) AS total_spending
FROM orders
GROUP BY customer_id
ORDER BY total_spending DESC
LIMIT 10;
Задача: Порівняння виручки по днях тижня
Хочеш дізнатись, у які дні тижня твій бізнес заробляє найбільше? Ось приклад:
SELECT
TO_CHAR(order_date, 'Day') AS day_of_week,
SUM(total_amount) AS total_revenue,
AVG(total_amount) AS avg_order_value
FROM orders
GROUP BY TO_CHAR(order_date, 'Day')
ORDER BY total_revenue DESC;
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ