SQL на собеседовании: вопросы и задачи
Сегодня SQL - один из самых популярных языков, который активно используется во многих профессиях. С вопросами по SQL на собеседовании сталкиваются аналитики различных направлений, дата-инженеры, тестировщики, DevOps-инженеры и не только. При этом важно не только знать теоретические аспекты SQL, но и уметь применять их на практике. Но чего именно ожидать кандидату на разных этапах процесса найма?
В этой статье мы рассмотрим типичные вопросы, которые могут встретиться вам на собеседовании, примеры задач по SQL, а также особенности тестового задания, технического и финального интервью.
Какие этапы проходит кандидат
В зависимости от должности и компании процесс найма может очень сильно различаться, но обычно он состоит из нескольких этапов, каждый из которых направлен на оценку различных навыков кандидата: от понимания теоретических основ до глубоких знаний и умения применять их на практике. Давайте рассмотрим самые популярные из них.
1. Телефонное или онлайн-интервью (Screening)
Часто первый этап собеседования — это краткий телефонный или онлайн-разговор с рекрутером или представителем HR. Основная цель этого этапа — понять, соответствует ли ваш опыт и навыки требованиям вакансии.
SQL-Вопросы на этом этапе:
Обычно SQL на этом этапе затрагивают поверхностно. Вас могут спросить о вашем опыте работы с базами данных, типах запросов, которые вы использовали, и насколько часто вы применяли SQL в своей работе. Примеры вопросов:
- С каким объемом данных вы обычно работаете?
- Какую СУБД вы предпочитаете и почему?
- Насколько хорошо вы знакомы с индексами и их использованием?
Иногда уже на этом этапе вам могут задать более практические вопросы, но, как правило, с односложными ответами, которые сможет проверить HR-специалист. Например:
Нам даны две таблицы: в первой всего 5 строк, во второй - 10. Мы соединяем их с помощью LEFT JOIN. Какое минимальное и максимальное количество строк может получиться в итоговой таблице?
Ответ:
Таблица может содержать от 5 до 50 строк.
2. Техническое интервью
Этот этап обычно проводится с участием технического лидера или другого специалиста, который глубже погружается в вашу техническую подготовку. Здесь и начинается основная проверка знаний SQL - могут быть как теоретические вопросы, так и задачи на написание запросов.
SQL-Вопросы на этом этапе:
Объясните разницу между INNER JOIN, LEFT JOIN и FULL OUTER JOIN.
Пример ответа:
- INNER JOIN: Возвращает только те записи, которые имеют соответствующие значения в обеих таблицах, участвующих в соединении. Если запись отсутствует хотя бы в одной из таблиц, она не будет включена в результат.
- LEFT JOIN: Возвращает все записи из левой таблицы (той, что указана первой в запросе), даже если нет соответствующих записей в правой таблице. Если соответствующая запись в правой таблице отсутствует, вместо нее будут возвращены NULL-значения.
- FULL OUTER JOIN: Возвращает все записи из обеих таблиц, независимо от того, есть ли соответствующие записи в другой таблице. Если соответствующих записей нет, будут возвращены NULL-значения для отсутствующих данных.
Как работает GROUP BY и какие функции агрегирования можно использовать вместе с ним?
Пример ответа:
GROUP BY: Этот оператор группирует строки, имеющие одинаковые значения в указанных столбцах, в одну или несколько строк. Это позволяет применять агрегатные функции, такие как COUNT, SUM, AVG, MAX, MIN, и другие, к каждой группе данных.
Что такое индекс в базе данных и как он влияет на производительность запросов?
Пример ответа:
- Индекс - это структура данных в базе данных, которая используется для быстрого поиска и доступа к данным в таблице. Индексы создаются на одном или нескольких столбцах таблицы и позволяют ускорить выполнение запросов за счет сокращения числа строк, которые нужно просматривать.
- Положительное влияние на производительность: Индексы значительно ускоряют операции поиска (SELECT), сортировки (ORDER BY), и объединения (JOIN), поскольку они позволяют базе данных быстро находить нужные строки.
- Отрицательное влияние на производительность: Однако индексы могут замедлять операции вставки (INSERT), обновления (UPDATE) и удаления (DELETE), так как каждый раз, когда изменяется индексируемое поле, нужно обновлять и сам индекс.
Как работает COALESCE и где его можно применять?
Пример ответа:
- COALESCE принимает один или несколько аргументов и возвращает первый из них, который не является NULL. Если все аргументы равны NULL, возвращается NULL.
- Обработка NULL-значений: COALESCE часто используется для подстановки значения по умолчанию, если поле содержит NULL.
- Упрощение сложных выражений: COALESCE может использоваться в сложных условиях для упрощения обработки нескольких возможных NULL значений в одном выражении.
SQL-Задачи на этом этапе:
В зависимости от уровня позиции, задачи на этом этапе могут включать написание SQL-запросов разного уровня. Вам могут предложить решить задачу в реальном времени, а также объяснить свою логику и подход к решению. Рассмотрим несколько примеров задач с собеседований:
- Легкая задача (взята с реального тестового в Альфа-банк):
Вам дана следующая структура таблиц:
Необходимо вывести количество людей, которые покупали товар с id = 5 после 10 октября 2021 (включительно).
Решать бесплатно!Справитесь?
Попробуйте решить задачу самостоятельно!Ответ:
SELECT COUNT(DISTINCT user_id) FROM purchases WHERE sku_id = 5 AND created_at >= '2021-10-10'
- Средняя задача:
Вам дана следующая структура таблиц:
Выберите ID товара с самым большим количеством заказов с разбивкой по годам.
Решать бесплатно!А с этой?
Попробуйте решить задачу самостоятельно!Ответ:
WITH sales AS ( SELECT TO_CHAR(ord_datetime, 'YYYY') as year, a.an_id, COUNT(DISTINCT o.ord_id) as cnt FROM Orders o JOIN Analysis a ON o.ord_an = a.an_id GROUP BY TO_CHAR(ord_datetime, 'YYYY'), a.an_id ), ranks AS ( SELECT *, RANK() OVER(PARTITION BY year ORDER BY cnt DESC) as rnk FROM sales ) SELECT year, an_id, cnt FROM ranks WHERE rnk = 1 ORDER BY year, an_id
- Сложная задача (взята с реального тестового в Альфа-банк):
Вам дана следующая структура таблиц:
Необходимо вывести среднюю стоимость 5-ой покупки с разбивкой по городам.
Решать задачу!Хотите попробовать решить?
Эта и еще более 100 задач доступны в премиальной подписке IT Resume!Ответ:
WITH rn AS ( SELECT *, ROW_NUMBER() OVER(PARTITION BY c.town, c.id_customer ORDER BY p.created_at, p.id) AS rn FROM purchases p JOIN skus s ON p.sku_id = s.id JOIN customer c ON p.user_id = c.id_customer ), filtered_rn AS ( SELECT * FROM rn WHERE rn = 5 ) SELECT town, AVG(price) AS avg_price_5th_purchase FROM filtered_rn GROUP BY town ORDER BY avg_price_5th_purchase DESC
3. Тестовое задание
Это не обязательный этап отбора, но после успешного прохождения технического интервью (а иногда на этапе после телефонного интервью) кандидата могут попросить выполнить тестовое задание. Как правило это задание объемнее, чем задачи на техническом интервью, оно может быть связано с анализом данных, подготовкой выводов и созданием отчетов на основе SQL-запросов.
SQL-Задачи на этом этапе:
Тестовое задание часто включает более сложные задачи, требующие написания многоуровневых запросов, оптимизации кода и анализа данных. Пример задания:
Вы работаете с таблицами, представляющими собой стандартную структуру базы данных для электронной коммерции:
- orders (информация о заказах):
- order_id: уникальный идентификатор заказа.
- customer_id: идентификатор клиента
- order_date: дата заказа
- status: статус заказа
- order_items (информация о товарах в заказах):
- order_item_id: уникальный идентификатор товара в заказе
- order_id: идентификатор заказа
- product_id: идентификатор товара
- quantity: количество товара
- price: цена за единицу товара
Задание:
- Напишите запрос, который возвращает все заказы, содержащие более 5 единиц товара одного типа.
- Напишите запрос, который выводит общее количество проданных товаров и общую выручку по каждому продукту за последний месяц.
- Напишите запрос, который возвращает процент отмененных заказов по сравнению с общим количеством заказов за последние три месяца.
- Напишите запрос для обнаружения потенциальных проблем с данными (например, заказов без товаров или товаров без заказов).
4. Финальное интервью
На финальном этапе собеседования кандидаты обычно встречаются с руководителями или представителями высшего руководства. Иногда на этих встречах не рассматриваются технические вопросы, но иногда могут обсуждаться результаты предыдущих тестов и общие подходы к решению задач.
SQL-Вопросы на этом этапе:
Здесь могут обсуждаться более высокоуровневые вопросы о том, как SQL используется в компании, как оптимизировать работу с базами данных, и как вы можете улучшить процессы аналитики в компании. Например:
- Как бы вы организовали процесс ETL для нашего проекта?
- Как вы справляетесь с проблемами производительности SQL-запросов в больших базах данных?
- Как вы обеспечиваете целостность данных при работе с транзакциями?
SQL-Задачи на этом этапе:
Чаще всего задачи на данном этапе будут аналогичными тем, что вы решали на этапе технического интервью.
Эпилог
Теперь вы точно знаете, к каким вопросами и задачам по SQL готовиться перед собеседованием. Помните, что важно не только знать теорию, но и уметь применять свои знания на практике, демонстрируя понимание задач бизнеса и способности к оптимизации работы с данными. Попрактиковать решение SQL-задач вы можете на нашей платформе - у нас есть задачи на SQL и Python разного уровня, в том числе примеры с реальных собеседований в топовые компании!