SQL-собеседование для аналитика редко проверяет только синтаксис. Чаще всего там смотрят сразу на несколько вещей:

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

Именно поэтому многие кандидаты говорят: “Я вроде знаю SQL, но на собеседовании все пошло не так”.

Ниже разберем, как подготовиться так, чтобы было не просто “что-то читал”, а была нормальная рабочая база.

Что обычно проверяют на SQL-собеседовании

Чаще всего вопросы идут по таким блокам:

  • SELECT, WHERE, ORDER BY
  • GROUP BY, агрегаты, HAVING
  • JOIN
  • подзапросы и CTE
  • оконные функции
  • работа с NULL
  • логика запроса и чтение чужого SQL

Иногда добавляют:

  • задачи на продуктовую аналитику
  • кейсы на воронки, retention, A/B-тесты
  • оптимизацию или поиск ошибок в запросе

С чего начать подготовку

Если база еще плавает, не надо сразу идти в “сложные задачи с собеседований”.

Сначала проверь, уверенно ли ты можешь:

  • выбрать нужные строки по условию
  • сгруппировать данные
  • посчитать SUM, AVG, COUNT
  • соединить 2 таблицы
  • объяснить разницу между WHERE и HAVING
  • объяснить разницу между LEFT JOIN и INNER JOIN

Если на этом уровне еще есть пробелы, лучше сначала добить фундамент.

Темы, которые нужно знать обязательно

1. GROUP BY и агрегаты

Это база почти любого SQL-собеседования.

Ты должен спокойно понимать:

  • как работает GROUP BY
  • почему нельзя просто так добавить столбец в SELECT
  • как ведут себя агрегаты с NULL
  • когда нужен HAVING

Типичный вопрос:

SELECT
    department,
    COUNT(*) AS cnt,
    AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING COUNT(*) > 5

Нужно уметь не просто читать это, а объяснить пошагово.

2. JOIN

Это одна из самых частых и самых болезненных тем.

Нужно знать:

  • INNER JOIN
  • LEFT JOIN
  • почему после JOIN может увеличиться число строк
  • как искать причины дублей

Очень частый вопрос:

  • почему LEFT JOIN внезапно раздул таблицу

Если ты умеешь это объяснять, это уже сильный сигнал для интервьюера.

3. WHERE, HAVING, CASE WHEN

Это тоже почти обязательный набор.

Что важно:

  • WHERE фильтрует строки до группировки
  • HAVING фильтрует группы после группировки
  • CASE WHEN помогает строить условную логику в расчете

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

Для junior это не всегда must-have на 100%, но если ты знаешь:

  • ROW_NUMBER()
  • RANK()
  • DENSE_RANK()
  • LAG()
  • LEAD()

то это уже сильно выделяет тебя.

Особенно полезно понимать задачи:

  • выбрать последнюю запись по пользователю
  • найти предыдущий заказ
  • посчитать изменение относительно прошлого периода

5. NULL и логические ловушки

Очень часто кандидаты валятся не на сложных функциях, а на логике.

Например:

  • NOT IN с NULL
  • деление целых чисел
  • поведение COUNT(column) и COUNT(*)
  • сравнение с NULL через =

Именно такие мелочи часто показывают, насколько человек реально писал запросы руками.

Какие задачи чаще всего дают

Обычно задачи на собеседовании можно разделить на 4 типа.

1. Написать запрос с нуля

Например:

  • найти клиентов с более чем 3 заказами
  • посчитать выручку по категориям
  • вывести последний заказ каждого пользователя

2. Найти ошибку в чужом запросе

Очень полезный формат, потому что в реальной работе ты не всегда пишешь код с нуля. Часто нужно читать и исправлять уже существующий SQL.

3. Объяснить разницу между конструкциями

Например:

  • WHERE vs HAVING
  • UNION vs UNION ALL
  • ROW_NUMBER vs RANK
  • INNER JOIN vs LEFT JOIN

4. Решить задачу на логику данных

Например:

  • почему после JOIN стало больше строк
  • почему сумма не сходится
  • почему запрос ничего не вернул

Вот это особенно приближено к реальной аналитике.

Как готовиться эффективно

Самый хороший формат подготовки:

1. Повторить теорию по блокам

Не пытайся “читать все подряд”. Разбей по темам:

  • день 1: агрегации и группировки
  • день 2: JOIN
  • день 3: подзапросы и CTE
  • день 4: оконные функции
  • день 5: задачи с ошибками и ловушками

2. Каждый блок закреплять руками

Просто читать мало. Нужно писать запросы самому.

Даже если задача кажется простой, лучше набить запрос руками, чем просто “понять глазами”.

3. Тренировать устное объяснение

На собеседовании важно не только решить задачу, но и проговорить ход мысли.

Например:

  • что ты делаешь сначала
  • почему выбрал именно LEFT JOIN
  • на каком этапе применяешь фильтр
  • какие риски по дублям ты видишь

Это сильно повышает качество ответа.

Частые ошибки кандидатов

1. Сразу писать сложный запрос без декомпозиции

Лучше идти по шагам:

  1. понять задачу
  2. определить таблицы
  3. определить ключи
  4. решить, где фильтр, где агрегация, где join

2. Не уточнять бизнес-логику

Иногда одна и та же задача допускает разные трактовки.

Например:

  • “активный пользователь” — это кто?
  • “последний заказ” — по дате создания или по дате оплаты?

Хороший кандидат не боится уточнять такие моменты.

3. Игнорировать дубликаты

Очень частая ошибка после JOIN.

Если ты не думаешь о кратности связей, можно получить формально рабочий запрос, но неправильный результат.

4. Пугаться, если не помнишь точный синтаксис

На хорошем собеседовании обычно важнее логика, чем идеальная память на детали.

Если ты честно объясняешь:

  • что хочешь сделать
  • какой инструмент для этого нужен
  • как бы ты это написал

это уже лучше, чем молча зависнуть.

Что можно сказать на собеседовании, если не уверен

Например:

  • “Я бы решал это через ROW_NUMBER(), чтобы выбрать последнюю запись в группе”
  • “Похоже, здесь риск размножения строк после JOIN, я бы проверил уникальность ключа”
  • “Если задача в отборе после агрегации, здесь нужен HAVING, а не WHERE

Такие формулировки показывают зрелое мышление даже если запрос еще не дописан до конца.

Мини-план подготовки на 7 дней

День 1

  • SELECT, WHERE, ORDER BY
  • простые фильтры и сортировки

День 2

  • GROUP BY
  • COUNT, SUM, AVG
  • HAVING

День 3

  • INNER JOIN
  • LEFT JOIN
  • дубли после join

День 4

  • подзапросы
  • CTE

День 5

  • ROW_NUMBER
  • RANK
  • LAG
  • LEAD

День 6

  • задачи на собеседования
  • разбор типовых ошибок

День 7

  • проговорить вслух решения
  • повторить слабые места

Итог

Подготовка к SQL-собеседованию аналитику — это не про “выучить 100 функций”. Это про то, чтобы уверенно держать базу и спокойно объяснять свою логику.

Если ты хорошо понимаешь:

  • агрегации
  • JOIN
  • фильтрацию
  • оконные функции
  • ловушки с NULL

то уже будешь чувствовать себя на интервью намного увереннее.

И самое важное: на собеседовании часто выигрывает не тот, кто знает самый сложный SQL, а тот, кто мыслит структурно и аккуратно работает с данными.