Теория· 10 мин· 10 XP
Фреймворк: 5 шагов аналитика
Почему «написать SQL» — это последний шаг
Начинающие аналитики сразу открывают редактор и начинают писать код. Опытные — сначала думают. Хаотичный запрос отражает хаотичное мышление.
5 шагов от задачи к результату
Шаг 1: Понять вопрос
Прочитай задачу и перефразируй своими словами:
- «Найти клиентов, которые...»
- «Посчитать для каждого...»
- «Сравнить X и Y по критерию Z»
Если задача размытая — задай уточняющие вопросы:
- «За какой период?»
- «По каким клиентам / продуктам / регионам?»
- «Что считается активным клиентом?»
Шаг 2: Найти нужные данные
Определи таблицы:
- Где хранятся нужные сущности? (clients, accounts, transactions)
- Какие поля нужны?
- Через какие ключи таблицы связаны?
Нарисуй схему на бумаге (даже простую).
Шаг 3: Декомпозировать на шаги
Сложный запрос = несколько простых шагов. Запиши псевдокод:
код
1. Посчитать сумму транзакций по каждому счёту
2. Соединить со счётами → получить client_id
3. Сложить по клиенту (несколько счетов)
4. Присоединить клиентов → добавить сегмент
5. Отфильтровать VIP с суммой > 50 000
6. Отсортировать по убыванию
Каждый шаг → один CTE.
Шаг 4: Написать запрос
- Начинай с самого внутреннего подзапроса / первого CTE
- Проверяй каждый CTE отдельно (
SELECT * FROM cte_name) - Добавляй шаги постепенно
Шаг 5: Проверить результат
- Ожидаемый порядок величин? (10 строк или 10 000?)
- Есть ли NULL там, где не должно быть?
- Проверь несколько строк вручную
Выбор инструмента
| Задача | Инструмент |
|---|---|
| Дать имя промежуточному результату | CTE |
| Обойти иерархию | WITH RECURSIVE |
| Агрегат без схлопывания строк | Оконная функция |
| Ранжировать внутри группы | ROW_NUMBER / RANK / DENSE_RANK |
| Значение предыдущей/следующей строки | LAG / LEAD |
| Нарастающий итог | SUM OVER (ORDER BY ...) |
| Деление на равные группы | NTILE |
| Доля от общей суммы | SUM() OVER () |
Запомни
Лучший запрос — тот, который легко читать и понять через 6 месяцев. Пиши код как для человека, не для базы данных.
Прочитайте урок до конца — прогресс засчитается автоматически