Аналитик данных — одна из самых востребованных позиций в России. Конкуренция за сильных кандидатов высока, а заниженный барьер на входе ведёт к потере времени команды. Правильный SQL-скрининг помогает найти баланс.
Чем аналитик данных отличается от других SQL-ролей
| Роль | Основные задачи | SQL-фокус |
|---|---|---|
| Аналитик данных | Отчёты, дашборды, ad-hoc анализ | Агрегация, JOIN, оконные функции |
| Data Scientist | Модели, эксперименты | Feature engineering, статистика |
| BI-разработчик | ETL, витрины данных | Сложные трансформации, оптимизация |
| Дата-инженер | Пайплайны, архитектура | DDL, партиционирование, производительность |
Для аналитика данных SQL — основной рабочий инструмент. Требования к нему выше, чем к DS, но ниже, чем к дата-инженеру.
Структура SQL-скрининга аналитика
Уровень 1: Базовая аналитика (обязательно для всех)
-- Датасет: e-commerce (orders, customers, products)
-- Задача: найдите топ-10 клиентов по выручке за последний квартал.
-- Покажите: имя клиента, количество заказов, суммарную выручку,
-- средний чек. Только завершённые заказы.
SELECT
c.name,
COUNT(o.id) AS order_count,
SUM(o.amount) AS total_revenue,
ROUND(AVG(o.amount), 0) AS avg_order
FROM customers c
JOIN orders o ON o.customer_id = c.id
WHERE o.status = 'completed'
AND o.created_at >= DATE_TRUNC('quarter', CURRENT_DATE)
GROUP BY c.id, c.name
ORDER BY total_revenue DESC
LIMIT 10;
Уровень 2: Продуктовая аналитика (Middle)
-- Задача: рассчитайте Retention Rate по когортам.
-- Когорта = месяц первой покупки. Retention = % вернувшихся в след. месяц.
WITH first_purchase AS (
SELECT customer_id, DATE_TRUNC('month', MIN(order_date)) AS cohort_month
FROM orders
GROUP BY customer_id
),
monthly_activity AS (
SELECT DISTINCT customer_id, DATE_TRUNC('month', order_date) AS activity_month
FROM orders
)
SELECT
fp.cohort_month,
COUNT(DISTINCT fp.customer_id) AS cohort_size,
COUNT(DISTINCT ma.customer_id) AS retained,
ROUND(100.0 * COUNT(DISTINCT ma.customer_id)
/ COUNT(DISTINCT fp.customer_id), 1) AS retention_pct
FROM first_purchase fp
LEFT JOIN monthly_activity ma
ON ma.customer_id = fp.customer_id
AND ma.activity_month = fp.cohort_month + INTERVAL '1 month'
GROUP BY fp.cohort_month
ORDER BY fp.cohort_month;
Зачем эта задача: retention analysis — стандартная аналитическая задача. Если кандидат решает её уверенно, он работал с реальными продуктовыми данными.
Уровень 3: Оптимизация и сложные запросы (Senior)
-- Задача: найдите пользователей, которые совершили покупку
-- в течение 7 дней после регистрации (конверсия в первую покупку)
-- и сравните средний LTV этих пользователей с остальными
WITH user_stats AS (
SELECT
u.id,
u.registered_at::DATE AS reg_date,
MIN(o.order_date) AS first_order_date,
CASE WHEN MIN(o.order_date) <= u.registered_at::DATE + 7
THEN 'fast_converter' ELSE 'slow_converter' END AS segment,
SUM(o.amount) AS ltv
FROM users u
LEFT JOIN orders o ON o.user_id = u.id AND o.status = 'completed'
GROUP BY u.id, u.registered_at
)
SELECT
segment,
COUNT(*) AS user_count,
ROUND(AVG(ltv), 0) AS avg_ltv,
ROUND(MEDIAN(ltv)::NUMERIC, 0) AS median_ltv
FROM user_stats
WHERE segment IS NOT NULL
GROUP BY segment;
Практические вопросы для собеседования
Вопрос 1: «Как вы строите метрики, которых нет в БД?»
Хороший ответ: описывает процесс декомпозиции бизнес-метрики на SQL-операции. Например, DAU = COUNT(DISTINCT user_id) WHERE date = CURRENT_DATE в таблице событий.
Вопрос 2: «Расскажите про случай, когда SQL-запрос работал слишком медленно»
Хороший ответ: конкретный пример из опыта, как диагностировал и что сделал (добавил индекс, переписал подзапрос, изменил фильтр).
Вопрос 3: «Как бы вы проверили корректность своей аналитики?»
Хороший ответ: проверка граничных значений, сравнение с другим источником, сумма частей должна равняться целому, проверка на NULL.
Что отличает сильного аналитика на скрининге
- Уточняет задачу перед написанием — спрашивает про период, статусы, граничные случаи
- Знает бизнес-контекст — понимает, зачем нужна метрика
- Думает об edge cases — пустые таблицы, NULL, дубликаты
- Предлагает несколько решений — и объясняет, какое выбрал и почему
- Понимает, что делать с результатом — не просто пишет запрос, а интерпретирует данные
Чеклист SQL-скрининга аналитика
- Задача на GROUP BY с несколькими агрегатными функциями
- Задача на JOIN двух или трёх таблиц
- Задача на оконную функцию (ROW_NUMBER или LAG)
- Задача с CTE (для Middle+)
- Вопрос на знание EXPLAIN (для Senior)
- Вопрос-кейс на бизнес-метрику
Помогите аналитикам подготовиться к вашему скринингу — направьте их на SQLlab.ru, где курс построен именно вокруг аналитических задач.