учебный путь · sql

SQL на собеседовании

  • SQL
  • Средний
  • 5 модулей
  • 25 задач
  • 5 задач · бесплатно до модуля 1 из 5

Классика SQL-собеседований на данных HR-системы «Пульс»: вторая по величине зарплата, лучший в отделе, топ-N с ничьями, сравнение с руководителем, поиск дублей и склейка их скриптом, серии дней и пропуски в календаре, деление на ноль и размножение строк при соединении, воронка найма и когорты. Условия короткие, краевые случаи жёсткие, ответ проверяется на скрытых наборах данных — вписать его литералом не выйдет.

AI-ассистент ведёт подсказками, но решение не выдаёт
intro

Что тебя ждёт в этом пути

Автор программы:

Что ты построишь

25 решений на PostgreSQL для типовых секций SQL-собеседования. Все задачи работают с одной HR-системой «Пульс»: сотрудниками, отделами, откликами, интервью и календарём посещений. Начнёшь со второй по величине зарплаты и топ-N, закончишь воронкой найма и когортами. Каждый запрос проверяется на скрытых наборах данных, поэтому подогнать ответ под известные строки не получится.

Для кого

Для аналитика, бэкенд- или дата-разработчика, который уже знает SELECT, WHERE и GROUP BY, но хочет отработать задачи SQL для собеседования без подсматривания в готовый ответ. Путь не пересказывает синтаксис с нуля: здесь важнее увидеть подвох в данных, выбрать устойчивый запрос и объяснить своё решение.

Что нужно знать до старта

  • Уверенно писать SELECT, WHERE, GROUP BY и базовые JOIN
  • Понимать NULL и порядок выполнения частей SQL-запроса

Чему научишься

  • Выбирать второе значение, топ-N и лидеров группы с правильной обработкой ничьих
  • Сравнивать строки одной таблицы через self-join и агрегаты своей группы
  • Искать и склеивать дубли, не ломаясь на NULL и связях между таблицами
  • Находить пропуски и серии дат через LEAD, generate_series и gaps and islands
  • Защищать агрегаты от деления на ноль, целочисленного деления и размножения строк
  • Считать воронки, накопительные итоги и когорты с оконными функциями SQL
curriculum

Задачи пути — 5 модулей, 25 задач

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

25 задач · 5 модулей
1.1
Вторая по величине зарплата
Классика собеседования: следующий уровень оклада, а не второй человек в списке.
1.2
Лучший в каждом отделе
Топ-1 в каждой группе: одна строка на отдел, ничья решается датой найма.
1.3
Выше среднего по отделу
Сравнение с агрегатом своей группы: среднее считается по отделу сотрудника, а не по компании.
1.4
Топ-3 уровня зарплат в отделе
Уровень оплаты вместо номера строки: одинаковые оклады делят один уровень, строк может быть больше трёх.
1.5
Зарабатывает больше руководителя
Self-join по manager_id: сравнение сотрудника со своим руководителем, а не с верхушкой компании.
2.1
Кандидаты с повторными откликами
Поиск дублей через GROUP BY + HAVING: отклики без почты дублями не считаются.
2.2
Первый отклик каждого кандидата
Дедупликация окном: одна строка на почту, а отклики без почты остаются каждый сам по себе.
2.3
Кто ни разу не проводил интервью
Анти-джойн на данных, где в связанной таблице есть NULL: NOT IN здесь возвращает пустоту.
2.4
Нагрузка интервьюеров
count(*) против count(колонки): сколько встреч провёл человек и сколько из них реально оценены.
2.5
Склеить повторные отклики
Скрипт из двух шагов: перевесить интервью дублей на основной отклик и только потом пометить дубли.
3.1
Сводка присутствия
Отмеченные дни против календарных: разница между count(*) и длиной промежутка сразу показывает пропуски.
3.2
Перерывы между отметками
Соседняя строка через LEAD: где между двумя отметками остался незакрытый день.
3.3
Календарь присутствия
generate_series плюс LEFT JOIN: в календаре обязаны быть и дни, когда не пришёл никто.
3.4
Пропущенные дни
Календарь на каждого сотрудника и анти-джойн к отметкам: какие дни внутри его отрезка остались пустыми.
3.5
Серии подряд идущих дней
Соберите отметки сотрудников в непрерывные серии и верните начало, конец и длину каждого интервала.
4.1
Воронка найма по отделам
Доля в процентах: целочисленное деление обнуляет её, а отдел без откликов роняет запрос делением на ноль.
4.2
Отклики и интервью по отделам
Размножение строк при соединении: наивный счётчик откликов растёт вместе с числом интервью.
4.3
Качество источников
WHERE против HAVING: дата отсекает строки до группировки, счётчик — группы после неё.
4.4
Доля отдела в фонде оплаты
Пустая сумма даёт NULL, а не ноль; доля считается от общего фонда, посчитанного в том же запросе.
4.5
Сводка по отделу
Три метрики из трёх таблиц в одной строке: соединить всё сразу — значит перемножить строки.
5.1
Отклики по месяцам
Соседний месяц через LAG и накопительный итог одним окном: обе функции считаются поверх агрегата.
5.2
Воронка этапов интервью
Сколько кандидатов дошло до каждого этапа и сколько отвалилось по дороге — LAG поверх агрегата.
5.3
Сколько ждали первой встречи
Разность дат по группе: от отклика до самой ранней встречи по нему.
5.4
Застрявшие отклики
Анти-джойн со сроком: активные отклики, по которым до сих пор не было ни одной встречи.
5.5
Когорты по месяцу отклика капстоун
Финал пути: когорта по месяцу отклика, доход до интервью и до найма, конверсия в процентах.
Путь входит в Koddo Premium Открой все премиум-пути, AI-ассистента без лимитов и daily challenge. от 490 ₽ / мес
koddo start sql-interview

Готов начать этот путь?

Зарегистрируйся — откроем путь прямо на первой задаче. Без установки и настройки, всё в браузере.