Блог
SQL
SQL-собеседование аналитика: как подготовиться и отрепетировать задачи за 2 недели

SQL-собеседование аналитика: как подготовиться и отрепетировать задачи за 2 недели

Знать SQL и решить задачу на собеседовании за 15 минут - два разных навыка. Дома можно подумать полчаса, заглянуть в документацию, переписать запрос пять раз. На собесе идет таймер, интервьюер смотрит на экран и просит рассуждать вслух. Многие, кто спокойно пишет запросы на работе, в этот момент теряются.

Хорошая новость: этот навык тренируется так же, как любой другой. Ниже разберу, как обычно устроена SQL-секция, какие три типа задач встречаются чаще всего и как за две недели подготовиться так, чтобы на собеседовании решать задачи в привычном ритме.

Как устроена SQL-секция

Чаще всего это 2-3 задачи на 30-60 минут. Сложность растет от задачи к задаче:
  1. Разминка: агрегаты, группировка, фильтр по группам.
  2. Соединение таблиц: JOIN, подзапросы, иногда таблица соединяется сама с собой.
  3. Оконные функции: рейтинги внутри групп, нарастающие итоги, сравнение с предыдущей строкой.
Оценивают при этом не только правильный ответ. Интервьюеру важно, как вы думаете: уточняете ли условие, замечаете ли крайние случаи (NULL, дубли, одинаковые значения), можете ли объяснить, почему выбрали именно этот способ.

Три типа задач, которые встречаются чаще всего

Примеры ниже учебные, на упрощенных таблицах. Все запросы проверены на PostgreSQL.

1. Группировка с условием на группу

Типичная формулировка: «Найдите клиентов, у которых два заказа и больше, и посчитайте их общую сумму».
SELECT customer_id, COUNT(*) AS orders, SUM(amount) AS total
FROM orders
GROUP BY customer_id
HAVING COUNT(*) >= 2
ORDER BY total DESC;
Где ошибаются: пишут условие на количество в WHERE. WHERE фильтрует строки до группировки, HAVING фильтрует уже готовые группы. Если на собесе вы проговорите эту разницу вслух, это плюс.

2. Таблица, соединенная сама с собой

Классика: «Найдите сотрудников, которые зарабатывают больше своего руководителя». Руководитель лежит в той же таблице, что и сотрудник, поэтому таблицу соединяют саму с собой.
SELECT e.name, e.salary, m.name AS manager, m.salary AS manager_salary
FROM employees e
JOIN employees m ON m.id = e.manager_id
WHERE e.salary > m.salary;
Что стоит сказать вслух: у директора нет руководителя (manager_id = NULL), и обычный JOIN его просто не возьмет. Для этой задачи это правильно. Если бы нужно было вывести всех сотрудников вместе с руководителем, понадобился бы LEFT JOIN.

3. Топ-N внутри каждой группы

Формулировка вроде: «Найдите трех самых активных ночных пользователей в каждом городе». Здесь две части: сначала посчитать ночные поездки, потом ранжировать пользователей внутри города.
WITH night AS (
  SELECT city, user_id, COUNT(*) AS rides
  FROM rides
  WHERE EXTRACT(HOUR FROM started_at) >= 23
     OR EXTRACT(HOUR FROM started_at) < 6
  GROUP BY city, user_id
), ranked AS (
  SELECT city, user_id, rides,
         DENSE_RANK() OVER (PARTITION BY city ORDER BY rides DESC) AS rnk
  FROM night
)
SELECT city, user_id, rides
FROM ranked
WHERE rnk <= 3
ORDER BY city, rides DESC, user_id;
Главный вопрос, который здесь ждет интервьюер: что делать, если у двух пользователей одинаковое число поездок? ROW_NUMBER выдаст ровно три строки и одного из равных отрежет случайно. DENSE_RANK оставит всех, кто делит место. Правильного ответа «вообще» нет, поэтому спросите, как считать равенство. Сам вопрос показывает опыт.

И вторая ловушка: «ночь» переходит через полночь. Условие «час от 23 до 6» не запишешь как BETWEEN, нужно OR.
Потренируйтесь на задачах
В SQL Arena больше тысячи задач с автопроверкой на настоящих таблицах: от первого SELECT до оконных функций и задач с собеседований. Задачи уровня Easy бесплатны, регистрация без карты.
Открыть SQL Arena

План репетиции на две недели

Неделя 1. Темы, без таймера. По 3-4 задачи в день, каждый день одна тема: группировка, JOIN, подзапросы, оконные функции, работа с датами. После каждой задачи разберите, где ошиблись, и запишите ошибку в отдельный список. К концу недели у вас будет личный список ловушек, и он полезнее любой шпаргалки.

Неделя 2. Условия собеседования. Каждый день одна пробная сессия: 2-3 задачи подряд под таймером, без подсказок и без поиска в интернете. Решайте вслух, даже если вы дома одни: на собесе молчание выглядит хуже, чем неверная первая версия запроса. После сессии сверьтесь со своим списком ловушек.
План репетиции SQL-собеседования на 2 недели
Перед каждой отправкой ответа проверяйте пять вещей:
  1. Не появились ли дубли после JOIN.
  2. Что будет со строками, где есть NULL.
  3. Как обрабатываются одинаковые значения в рейтинге.
  4. Нужна ли сортировка в результате.
  5. Совпадают ли названия и порядок колонок с условием.
5 проверок перед отправкой ответа на SQL-собеседовании

Где тренироваться в формате собеседования

Для второй недели нужен тренажер, который ведет себя как настоящее собеседование. В SQL Arena для этого есть режим «Собеседование»: серверный таймер, без подсказок, после сессии отчет с разбором. Бесплатно в нем одна попытка в день, этого хватает, чтобы встроить репетицию в график. Начать можно с бесплатной задачи, которая встречалась на собеседовании в Сбербанке: «Суммарный баланс по клиентам».

Для первой недели подойдет трек «Подготовка к собеседованию»: 41 задача в 6 модулях, от разминки и JOIN до оконных функций и сложных задач. Трек входит в Premium.
Трек «Подготовка к собеседованию» в SQL Arena: 41 задача, 6 модулей
Там же подборка задач, которые встречались на собеседованиях в Яндексе, Ozon, Т-Банке, Сбербанке, Wildberries, Avito и VK. Например, «Сотрудники с зарплатой выше руководителя» и «Топ-3 ночных пользователей в каждом городе»: это те же приемы, что в примерах выше, только на настоящих датасетах. Решение проверяется на скрытых данных, поэтому подогнать запрос под ответ не получится. Легкие задачи доступны бесплатно, задачи Medium и Hard и безлимитный режим собеседования входят в Premium.

Если хотите сначала повторить теорию, в блоге есть разборы по темам: 9 задач с собеседований с решениями, оконные функции: 9 паттернов и self-join на примерах.

Две недели такой репетиции, и на собеседовании задача будет казаться привычной.
Потренируйтесь на задачах
В SQL Arena больше тысячи задач с автопроверкой на настоящих таблицах: от первого SELECT до оконных функций и задач с собеседований. Задачи уровня Easy бесплатны, регистрация без карты.
Открыть SQL Arena
Курс «Инженер по ручному тестированию»
Учим с нуля до трудоустройства: персональный ментор, задания в Jira, подготовка к собеседованиям и поддержка на испытательном сроке.
Узнать о курсе
По всем вопросам:
Quality Academy
Используя данный сайт, вы даёте согласие на использование файлов cookie.
ОК, ЗАКРЫТЬ