🤖 SQL в действии: запросы, которые должен знать каждый аналитикДля аналитика важно не только знать
базовые запросы, но и уметь использовать более сложные конструкции: агрегатные функции, подзапросы, оконные функции и объединения таблиц. Эти навыки помогут находить инсайты, анализировать метрики и строить отчеты на основе больших объемов данных.
В этом посте мы продолжаем разбирать полезные SQL-запросы, которые пригодятся каждому аналитику. Они помогут вам работать с данными быстрее и эффективнее.
1. Анализ продаж с использованием агрегатных функцийДопустим, у нас есть таблица
sales
с колонками:
sale_id
,
product_id
,
region
,
sale_date
,
amount
. Мы хотим узнать общую сумму продаж и средний чек по регионам:
SELECT
region,
SUM(amount) AS total_sales,
AVG(amount) AS avg_check
FROM sales
GROUP BY region
ORDER BY total_sales DESC;
Этот запрос позволяет быстро понять, какой регион приносит больше всего выручки.
2. Использование подзапросов для поиска аномалийПредположим, мы хотим найти товары, продажи которых ниже среднего уровня по всем товарам:
SELECT product_id, SUM(amount) AS total_sales
FROM sales
GROUP BY product_id
HAVING SUM(amount) < (
SELECT AVG(total_sales)
FROM (
SELECT SUM(amount) AS total_sales
FROM sales
GROUP BY product_id
) AS subquery
);
Здесь мы используем подзапрос для вычисления среднего уровня продаж по всем товарам и фильтруем те товары, которые находятся ниже этого уровня.
3. Оконные функции для анализа трендовОконные функции позволяют анализировать данные без группировки. Например, найдем кумулятивную выручку (накопительный итог) по датам:
SELECT
sale_date,
SUM(amount) OVER (ORDER BY sale_date) AS cumulative_sales
FROM sales;
Такой запрос поможет увидеть динамику роста выручки за определенный период.
4. Сравнение текущих и предыдущих периодовЧтобы сравнить продажи текущего месяца с предыдущим, можно использовать оконные функции:
SELECT
region,
DATE_TRUNC('month', sale_date) AS month,
SUM(amount) AS monthly_sales,
LAG(SUM(amount)) OVER (PARTITION BY region ORDER BY DATE_TRUNC('month', sale_date)) AS prev_month_sales,
SUM(amount) - LAG(SUM(amount)) OVER (PARTITION BY region ORDER BY DATE_TRUNC('month', sale_date)) AS sales_diff
FROM sales
GROUP BY region, DATE_TRUNC('month', sale_date)
ORDER BY region, month;
Этот запрос покажет динамику продаж по регионам с учетом разницы между месяцами.
5. Объединение таблиц для анализаДопустим, у нас есть две таблицы:
products
(с информацией о товарах) и
sales
(с информацией о продажах). Чтобы получить список товаров с их категориями и общей суммой продаж, используем
JOIN
:
SELECT
p.product_name,
p.category,
SUM(s.amount) AS total_sales
FROM products p
LEFT JOIN sales s ON p.product_id = s.product_id
GROUP BY p.product_name, p.category
ORDER BY total_sales DESC;
Такой запрос помогает объединять данные из нескольких таблиц для более глубокого анализа.
Попробуйте эти запросы на своих данных и убедитесь в их эффективности! 🚀