Обзор собеседования
Обзор собеседования
Компания : крупный бигтех-ритейл в РФ
Вилка : 250к
Должность : дата аналитик
Формат : удаленный
Грейд : Middle +
Дата собеса : сентябрь 2026
Разбираем технический блок: две задачи на SQL, одна на Python и вопрос по матстату. Задачи несложные, но на скорости, без подсказок и с человеком за плечом легко споткнуться о мелочи. Решения спрятаны, сначала попробуйте сами, потом нажмите и сверьтесь.
Структура таблиц для SQL-задач users (клиенты): contact_id, client_segment (сегмент) purchases (покупки на уровне SKU): purchase_id, cheque_id (ID чека), contact_id, sku_id, purchase_date, sku_qty (количество штук SKU), sku_price (цена за 1 штуку), region (регион)
1 SQL: метрики по регионам и сегментам
Для каждого региона и сегмента посчитать число уникальных клиентов, число оформленных чеков и общую выручку за все время.
SELECT p.region, u.client_segment,
COUNT(DISTINCT p.contact_id) AS unique_users,
COUNT(DISTINCT p.cheque_id) AS cheques,
SUM(p.sku_qty * p.sku_price) AS revenue
FROM purchases p
JOIN users u USING (contact_id)
GROUP BY 1, 2; ps таблица на уровне SKU, поэтому один чек размазан по нескольким строкам. COUNT(*) завысил бы число чеков, нужен COUNT(DISTINCT cheque_id). Выручка считается как количество на цену по каждой строке, а не просто сумма цен. И помним про INNER JOIN: покупки клиентов, которых нет в users, потеряются. Если они нужны, берем LEFT JOIN.
2 SQL: VIP с тратами больше 50 000 за 2026 год
Вывести contact_id клиентов из сегмента vip, которые за 2026 год суммарно потратили в сети больше 50 000 рублей.
SELECT u.contact_id
FROM users u
JOIN purchases p USING (contact_id)
WHERE u.client_segment = 'vip'
AND p.purchase_date >= '2026-01-01'
AND p.purchase_date < '2027-01-01'
GROUP BY u.contact_id
HAVING SUM(p.sku_qty * p.sku_price) > 50000; ps порог по сумме ставим в HAVING, потому что WHERE работает до группировки. А год фильтруем диапазоном дат, а не через DATE_PART('year', ...) = 2026. Функция над колонкой мешает использовать индекс и отсечение партиций, диапазон дает это без потерь.
3 Python: уникальные карты в датафрейме
Есть датафрейм df_card с данными о кредитных картах: id (ID товара), tariff_code (код тарифа, целое от 1 до 9), sold_flag (1 если продан, 0 если нет), first_activation (сколько дней прошло от продажи до первого использования, None если не продан). Первый пункт: вывести количество уникальных карт. df_card["id"].nunique()
# 5 ps считаем по id, а не по строкам: если в данных есть дубли, len(df_card) соврет. nunique() по умолчанию не считает пропуски (NaN).
4 Матстат: время простоя на светофоре
Светофор: красный горит 30 секунд, зеленый 30 секунд. Водитель подъезжает в случайный момент. Чему равно математическое ожидание времени простоя?
Два случая:
1) с вероятностью 1/2 попадаем на зеленый, простой 0
2) с вероятностью 1/2 попадаем на красный, ждем равномерно от 0 до 30 секунд, в среднем 15
E = 1/2 · 0 + 1/2 · 15 = 7,5 секунды
Для красного R и зеленого G общая формула: R² / (2 · (R + G)). При R = G = 30 это 900 / 120 = 7,5.
❤️🔥 Подписывайтесь и поддержите канал бустом
↗️ Менторю и помогаю выйти на оффер
❓ А как бы вы считали, если бы красный горел дольше зеленого?
@data_driven_bogdan
Откликнуться в Telegram →
⚠️ Никогда не платите «за оформление» или «гарантию трудоустройства» — это признак мошенников. Работа ТРУ не несёт ответственности за содержание вакансии.