Вопросы на собеседовании аналитика: SQL и метрики

Что спрашивают у стажёров и джунов в аналитике: SQL на бумаге, статистика и продуктовые кейсы. У каждого вопроса — короткий ответ и типичная ловушка.

SQL

  1. Какие бывают JOIN?

    INNER — только совпавшие строки; LEFT — все строки левой таблицы и совпавшие справа (остальное — NULL); RIGHT — наоборот; FULL — все строки обеих; CROSS — все комбинации.

  2. Почему после LEFT JOIN COUNT(*) вырос в три раза?

    В правой таблице несколько строк на один ключ — например, три заказа у клиента, — и каждая строка слева размножилась. Лечится агрегацией правой таблицы до JOIN или COUNT(DISTINCT client_id).

  3. Чем WHERE отличается от HAVING?

    WHERE фильтрует строки до группировки, HAVING — группы после GROUP BY, поэтому в нём можно использовать агрегаты: HAVING COUNT(*) > 5.

  4. COUNT(*), COUNT(col) и COUNT(DISTINCT col) — в чём разница?

    COUNT(*) считает все строки, COUNT(col) — строки, где col не NULL, COUNT(DISTINCT col) — уникальные не-NULL значения.

  5. Как ведёт себя NULL в сравнениях?

    Любое сравнение с NULL даёт «неизвестно», поэтому col = NULL не находит ничего — нужно IS NULL. NOT IN с NULL в подзапросе возвращает пустой результат; надёжнее NOT EXISTS.

  6. Что такое оконные функции?

    Агрегаты и ранги по «окну» строк без схлопывания результата: ROW_NUMBER(), RANK(), SUM() OVER (PARTITION BY … ORDER BY …). Типичные задачи — топ-N в каждой группе, накопительный итог, разница с предыдущей строкой через LAG.

  7. Как найти вторую по величине зарплату?

    SELECT MAX(salary) FROM staff WHERE salary < (SELECT MAX(salary) FROM staff); или через DENSE_RANK() OVER (ORDER BY salary DESC) и фильтр по рангу 2 — второй вариант проще обобщить до N-й.

  8. Как найти дубликаты?

    GROUP BY по полям, которые должны быть уникальными, и HAVING COUNT(*) > 1. Чтобы оставить одну строку из дублей — ROW_NUMBER() OVER (PARTITION BY …) и строки с номером больше 1.

Статистика и продуктовые кейсы

  1. Чем медиана отличается от среднего и когда что брать?

    Среднее чувствительно к выбросам: пара огромных чеков сдвигает его вверх. Для чеков, зарплат и времени сессии обычно смотрят медиану, а среднее — вместе с распределением.

  2. Как устроен A/B-тест?

    Гипотеза и одна главная метрика заранее; случайное разделение пользователей; размер выборки считают до старта из ожидаемого эффекта. Итог смотрят один раз по окончании, а не подглядывают каждый день.

  3. Что такое p-value?

    Вероятность увидеть такую же или бо́льшую разницу, если на самом деле эффекта нет. Меньше порога (часто 0,05) — считаем разницу статистически значимой. Это не вероятность того, что гипотеза верна.

  4. Как посчитать retention?

    Берут когорту — например, зарегистрировавшихся в одну неделю — и смотрят долю тех, кто вернулся на 1-й, 7-й, 30-й день. Считают по когортам, чтобы новые пользователи не смешивались со старыми.

  5. Метрика упала на 20% — что будете делать?

    Проверить данные (сбой трекинга, изменение формулы), затем разрезать: по платформам, версиям, регионам, источникам трафика, сегментам пользователей. Сопоставить с релизами и внешними событиями. Сначала найти, где упало, потом — почему.

  6. Как построить воронку и найти узкое место?

    Выписать шаги от входа до целевого действия, посчитать конверсию каждого шага и сравнить с прошлым периодом и между сегментами. Узкое место — шаг с самой большой потерей относительно нормы, а не просто самый маленький.

На кейсах интервьюер смотрит, как вы структурируете проблему: гипотезы, данные для проверки, порядок действий. Проговаривайте план вслух, даже если сразу знаете ответ. Как готовиться по дням — в отдельном материале.