SQL-вопросы на собесе аналитика в Яндекс

Проверь себя · 1/3разбор после ответа
В таблице orders поле promo_code может быть NULL. Что произойдёт со строкой, где promo_code = NULL, при фильтре WHERE promo_code <> 'NONE'?

О чём эта статья

В Яндексе планка по SQL у аналитиков традиционно высокая. В этой статье — обзор типов задач, которые полезно проработать перед собеседованием.

Информация основана на публичных источниках и опыте кандидатов. Конкретный набор задач зависит от команды и уровня позиции. Актуальные вакансии и требования — на карьерной странице Яндекса.

Формат секции

Обычно это одна-две технические секции по 45–90 минут: живое решение задач в общем редакторе или на доске. Интервьюер просит думать вслух, уточнять условия и разбирать подход, а не только получать правильный ответ.

Типы задач

Оконные функции

Почти обязательный блок. Стоит уверенно владеть:

  • ROW_NUMBER, RANK, DENSE_RANK
  • LAG, LEAD
  • SUM, AVG, COUNT с OVER
  • рамки ROWS BETWEEN и RANGE BETWEEN

Полезно: задачи по оконным функциям и шпаргалка по оконным функциям.

Сессионизация событий

Классика для интернет-компании: разбить поток действий пользователя на сессии (например, с разрывом в 30 минут).

Подход через LAG и накопительную сумму:

WITH gaps AS (
    SELECT
        user_id,
        event_time,
        EXTRACT(EPOCH FROM (event_time - LAG(event_time) OVER (PARTITION BY user_id ORDER BY event_time))) / 60 AS gap_min
    FROM events
),
session_id AS (
    SELECT
        user_id,
        event_time,
        SUM(CASE WHEN gap_min > 30 OR gap_min IS NULL THEN 1 ELSE 0 END)
            OVER (PARTITION BY user_id ORDER BY event_time) AS session_num
    FROM gaps
)
SELECT user_id, session_num, MIN(event_time) AS start_at, MAX(event_time) AS end_at, COUNT(*) AS events
FROM session_id
GROUP BY user_id, session_num;

Когортный анализ и retention

Часто просят посчитать retention D1 / D7 / D30 для когорты по месяцу регистрации. Полезные материалы:

Воронки конверсии

Последовательная воронка с учётом порядка событий и таймингов. Базовый приём — агрегация по пользователю и проверка времён событий.

Полезно: SQL для воронок конверсии.

Оптимизация запросов

Могут дать медленный запрос и попросить ускорить. Ожидают, что вы:

  • Прочитаете план (EXPLAIN)
  • Предложите индекс или переписанный JOIN
  • Обсудите материализацию или партиционирование

Полезно: SQL-оптимизация для аналитика.

ClickHouse-специфика

Многие команды в Яндексе работают на ClickHouse, поэтому полезно понимать:

  • Массивы и arrayJoin
  • Функции с суффиксом If (sumIf, countIf)
  • Приближённые функции квантилей
  • Материализованные представления

Полезно: шпаргалка по ClickHouse.

Прокачай SQL для собеса
500+ задач по SQL: оконные функции, JOIN, CTE — с разбором каждой
Тренировать SQL в Telegram

Как показать себя

  • Уточняйте условия задачи до того, как начнёте писать
  • Говорите вслух: что собираетесь делать, почему этот подход
  • Не стесняйтесь проговаривать альтернативы и их ограничения
  • Разбирайте edge cases: NULL, дубли, пустые выборки
  • Честно признавайтесь, если что-то не помните наизусть

Связанные темы

FAQ

На каком уровне SQL ожидают?

Уверенный middle или выше: оконные функции, CTE, оптимизация.

Нужен ли ClickHouse?

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

Язык интервью?

Обычно русский.