Вопросы на собеседовании: Аналитик данных
100 реальных вопросов с образцовыми ответами и пояснениями для уровня Junior.
Смотреть пример резюме: Аналитик данных →Тренировка флешкарточками
Интервальное повторение · Hunter Pass
Вопросы
Базовый оператор SELECT извлекает данные из одной или нескольких таблиц.
- FROM задаёт исходную таблицу, а WHERE фильтрует отдельные строки.
- GROUP BY формирует группы, а HAVING фильтрует их после агрегации.
- ORDER BY сортирует результат, а LIMIT ограничивает число возвращаемых строк.
- Логический порядок частей запроса помогает понять результат и правильно разместить фильтры.
Зачем это спрашивают: Интервьюер проверяет понимание структуры запроса и порядка его выполнения, а не умение скопировать запрос из туториала.
WHERE фильтрует строки до группировки, а HAVING фильтрует агрегированные группы.
- WHERE country = 'DE' оставляет только строки по Германии до агрегации.
- HAVING SUM(revenue) > 1000 оставляет группы с суммой больше 1000.
- На этапе выполнения WHERE агрегатных значений ещё не существует.
- Условия по строкам задают в WHERE, а условия по агрегатам в HAVING.
Зачем это спрашивают: Эта классика отсеивает кандидатов, которые вызубрили синтаксис, но не понимают порядок обработки запроса в SQL.
GROUP BY объединяет строки с одинаковыми значениями, чтобы рассчитывать агрегаты по каждой группе.
- Группировка заказов по customer_id создаёт одну итоговую группу на клиента.
- После этого SUM(amount) может посчитать суммарные траты каждого клиента.
- Без GROUP BY агрегат рассчитывается по всему набору результатов.
- Колонки в SELECT должны входить в группировку или агрегатную функцию.
Зачем это спрашивают: Понимание гранулярности агрегации - самый частый источник неверных цифр в SQL у джунов, поэтому интервьюеры проверяют его в первую очередь.
INNER JOIN оставляет только совпавшие строки, а LEFT JOIN сохраняет все строки левой таблицы.
- INNER JOIN удаляет строки слева, для которых нет совпадения справа.
- LEFT JOIN заполняет правые колонки значениями NULL, если совпадения нет.
- Клиент без заказов исчезнет из результата INNER JOIN.
- Неверно выбранный JOIN может незаметно изменить количества и суммы.
Зачем это спрашивают: Сильный кандидат объясняет практическое следствие для числа строк и итогов, а не только определение из учебника.
Чтобы найти топ-10 клиентов, нужно агрегировать выручку по клиентам и отсортировать её по убыванию.
- Выбираем customer_id и SUM(amount) из таблицы orders.
- Группируем по customer_id, чтобы получить одну сумму выручки на клиента.
- Сортируем алиас выручки по убыванию и применяем LIMIT 10.
- Перед финальным рейтингом уточняем, считать выручку до или после возвратов.
Зачем это спрашивают: Базовая рабочая задача, где интервьюер ждёт связку GROUP BY, ORDER BY и LIMIT плюс уточняющий вопрос про определение выручки.
Подсчёт всех строк учитывает каждую строку, а COUNT(column) не учитывает NULL в указанной колонке.
- Результаты совпадут, только если в выбранной колонке нет NULL.
- После LEFT JOIN клиент без заказов всё равно даёт одну присоединённую строку.
- COUNT(orders.id) корректно вернёт для такого клиента ноль заказов.
- Подсчёт всех присоединённых строк незаметно завысил бы результат.
Зачем это спрашивают: Вопрос отсеивает тех, кто не знает, как NULL взаимодействует с подсчётом, а это ежедневная забота в реальной отчётности.
Основные агрегатные функции сводят множество строк к полезным статистикам.
- COUNT считает строки или значения не NULL, а SUM складывает числа.
- AVG вычисляет среднее арифметическое, а MIN и MAX возвращают крайние значения.
- GROUP BY рассчитывает эти показатели отдельно для категорий, например стран.
- Все стандартные агрегаты, кроме подсчёта всех строк, пропускают NULL.
Зачем это спрашивают: Проверяется базовая беглость в повседневном словаре агрегации, включая оговорку про NULL.
DISTINCT удаляет дубликаты из результата и оставляет каждую комбинацию выбранных значений один раз.
- Он применяется ко всей комбинации выбранных колонок, а не только к первой.
- SELECT DISTINCT для одной колонки возвращает её уникальные значения.
- COUNT(DISTINCT customer_id) считает уникальных покупателей, а не заказы.
- Используйте DISTINCT осознанно, поскольку он может скрыть созданные запросом дубликаты.
Зачем это спрашивают: Интервьюер ждёт пример про уникальных покупателей против заказов, который показывает применение DISTINCT к реальному бизнес-вопросу.
ORDER BY последовательно сортирует данные по каждой перечисленной колонке.
- Первая колонка задаёт основной порядок, а следующие разрешают равенства.
- По умолчанию сортировка идёт по возрастанию, а DESC меняет её на убывание.
- ORDER BY country, revenue DESC ранжирует выручку внутри каждой страны.
- Без ORDER BY база данных не гарантирует порядок строк.
Зачем это спрашивают: Последний пункт про негарантированный порядок отличает тех, кого реальные базы уже кусали, от тех, кто с этим не сталкивался.
NULL обозначает отсутствующее или неизвестное значение в SQL, а не ноль или пустую строку.
- Сравнение через знак равенства с NULL не даёт истинного результата.
- Для поиска пропусков используют IS NULL, а для их исключения IS NOT NULL.
- NULL может влиять на совпадения в JOIN и результаты агрегатов.
- Перед выводами проверяйте долю NULL в ключевых колонках.
Зачем это спрашивают: Проверяется понимание трёхзначной логики на практике, ведь ошибка с = NULL даёт тихо пустые результаты.
Дубликаты можно найти группировкой по колонкам, которые должны быть уникальными.
- Группируем по предполагаемому ключу, например email, и считаем строки.
- Через HAVING оставляем значения, для которых COUNT больше единицы.
- Результат покажет каждый задублированный ключ и частоту его появления.
- Для просмотра полных строк присоединяем результат обратно или используем ROW_NUMBER.
Зачем это спрашивают: Практическая база; сильный кандидат выдаёт паттерн GROUP BY плюс HAVING без запинки.
Подзапрос представляет собой SQL-запрос, вложенный в другой запрос.
- В зависимости от задачи он может находиться в FROM, WHERE или SELECT.
- Например, с ним можно сравнить траты каждого клиента с рассчитанным внутри средним.
- Подзапросы удобны для короткой одноразовой логики.
- Если вложенность мешает чтению, лучше заменить её на CTE.
Зачем это спрашивают: Интервьюер хочет услышать конкретный сценарий применения и понимание, когда подзапросы вредят читаемости.
CTE представляет собой именованный временный результат, объявленный через WITH для использования в основном запросе.
- Он позволяет читать сложный запрос как последовательность понятных шагов.
- В одном CTE можно очистить данные, а в следующем агрегировать их.
- Основной запрос обращается к каждому CTE почти как к таблице.
- Структура сверху вниз упрощает отладку и код-ревью.
Зачем это спрашивают: Показывает, пишете ли вы SQL, который смогут поддерживать коллеги, а это важнее хитрых однострочников.
UNION и UNION ALL вертикально объединяют результаты запросов с совместимой структурой.
- Каждый запрос должен возвращать одинаковое число колонок совместимых типов.
- UNION удаляет дубликаты строк из общего результата.
- UNION ALL сохраняет все строки и не тратит ресурсы на дедупликацию.
- Выбирайте UNION ALL, если пересечение невозможно или дубликаты имеют смысл.
Зачем это спрашивают: Хороший ответ покрывает и семантическую разницу, и последствия для производительности.
LIKE фильтрует текст, сопоставляя его с шаблоном.
- Знак процента соответствует любой последовательности символов.
- Знак подчёркивания соответствует ровно одному символу.
- Шаблон, оканчивающийся на @gmail.com, позволяет найти адреса Gmail.
- Для поиска без учёта регистра используйте ILIKE или текст в нижнем регистре.
Зачем это спрашивают: Оговорка про чувствительность к регистру отличает кандидатов, которые реально чистили грязные текстовые данные.
CASE WHEN добавляет условную логику в SQL-выражение.
- С его помощью суммы можно разметить как малые, средние или крупные.
- Он позволяет считать условные итоги, возвращая сумму только для оплаченных строк.
- ELSE обрабатывает строки, не подошедшие ни под одно условие.
- CASE можно использовать в SELECT, WHERE, GROUP BY и ORDER BY.
Зачем это спрашивают: Паттерн условного агрегата выдаёт человека, который строил настоящие сводные отчёты на SQL.
Первичный ключ идентифицирует каждую строку, а внешний связывает строки через ключ, на который ссылается.
- Первичный ключ должен быть уникальным и не содержать NULL ни в одной строке.
- Внешний ключ ссылается на первичный ключ или ключ с ограничением UNIQUE, часто в другой таблице.
- Значения внешнего ключа могут повторяться и быть NULL, если это не запрещено дополнительными ограничениями; orders.customer_id может ссылаться на customers.id.
- По этим ограничениям аналитик понимает пути соединения, кардинальность связей и гранулярность таблиц.
Зачем это спрашивают: Интервьюер проверяет, читаете ли вы схему как карту джойнов и гранулярности, а не как список таблиц.
Повторяющиеся ключи соединения могут привести к тому, что JOIN вернёт больше строк, чем любая из исходных таблиц.
- SQL возвращает каждую совпавшую пару, а не одну строку на исходную запись.
- Если ключ встречается дважды слева и трижды справа, JOIN вернёт шесть совпавших строк.
- Агрегация повторившихся сумм после такого соединения может завысить выручку или другие итоги.
- До соединения проверяйте уникальность ключей и ожидаемую кардинальность связи, а после него сравнивайте число строк.
Зачем это спрашивают: Размножение строк - самый частый тихий баг в аналитическом SQL, поэтому кандидат, называющий проверку, сразу выделяется.
Для выбора последних 30 дней колонку с датой сравнивают с текущей датой минус 30-дневный интервал.
- В PostgreSQL можно написать order_date >= CURRENT_DATE - INTERVAL '30 days'.
- В MySQL и BigQuery синтаксис вычитания дат отличается.
- До фильтрации уточните, хранится в поле дата или таймстемп.
- Проверьте часовой пояс и правила границ, чтобы включить нужные дни.
Зачем это спрашивают: Фильтрация по датам выглядит тривиально, но прячет ловушки часовых поясов и границ, и интервьюер хочет увидеть эту осознанность.
IN проверяет принадлежность списку, а BETWEEN проверяет включающий диапазон.
- IN читается лучше нескольких OR для значений вроде кодов стран.
- BETWEEN 10 AND 100 включает и 10, и 100.
- Включённые границы удобны для простых числовых диапазонов.
- Для таймстемпов лучше явно задать включённое начало и исключённый конец.
Зачем это спрашивают: Оговорка про границы таймстемпов показывает практический опыт, а не только знание синтаксиса.
Закрытые вопросы
- 21
Как агрегировать дневные данные в месячные итоги в SQL?
sqlaggregation - 22
Что такое оконная функция и какой простой пример полезен аналитику?
window-functions - 23
Как соединить больше двух таблиц в одном запросе?
joinsqueries - 24
Как агрегатные функции обращаются с NULL и почему это важно?
aggregationfundamentals - 25
Как вы проверяете корректность результатов запроса перед отправкой стейкхолдеру?
stakeholder-managementqueriescommunication - 26
В чём разница между средним, медианой и модой и когда использовать каждую?
descriptive - 27
Почему обычно публикуют медианный доход, а не средний?
descriptive - 28
Как объяснить стандартное отклонение простыми словами?
dispersion - 29
Чем дисперсия отличается от стандартного отклонения?
dispersion - 30
Что такое перцентили и квартили?
percentiles - 31
Что такое выброс и как его обнаружить простым правилом?
outliers - 32
В чём разница между корреляцией и причинностью?
correlation - 33
О чём говорят коэффициенты корреляции 0.8, минус 0.8 и 0?
correlation - 34
Что такое скошенное распределение и как скос влияет на среднее и медиану?
distributions - 35
Чем выборка отличается от генеральной совокупности и почему мы работаем с выборками?
sampling - 36
Что показывает гистограмма и когда вы её строите?
distributions - 37
Общий средний чек вырос, но в каждом сегменте клиентов средний чек упал. Как такое возможно?
revenue - 38
Что такое нормальное распределение и почему оно важно аналитику?
distributions - 39
Что делают VLOOKUP и XLOOKUP и почему XLOOKUP считается лучше?
excel - 40
Что такое сводная таблица и когда вы её используете?
excel - 41
В чём разница между относительными и абсолютными ссылками на ячейки в Excel?
excel - 42
Что делают SUMIF и COUNTIF и когда вы к ним прибегаете?
excel - 43
Как вы находите и удаляете дубликаты в таблице Excel или Google Sheets?
spreadsheetsspread - 44
Как вы применяете условное форматирование в анализе?
excel - 45
VLOOKUP возвращает #N/A для значений, которые точно есть в исходной таблице. Что проверяете?
excel - 46
Как вы делаете рабочую таблицу понятной для другого человека?
spreadsheetsspread - 47
В какой момент таблица перестаёт быть подходящим инструментом для анализа?
spreadsheetsspread - 48
Какими функциями таблиц вы чистите грязные текстовые данные?
spreadsheetsspread - 49
Как вы обрабатываете пропущенные данные в датасете?
missing-datasoft-skills - 50
Как вы выбираете между удалением строк с пропусками и их заполнением?
missing-data - 51
Опишите по шагам, как вы чистите сырой датасет перед анализом.
cleaning - 52
В колонке городов встречаются значения NY, N.Y. и New York. Как это исправить?
schema - 53
Из разных источников приходят даты в смешанных форматах вроде 03/04/2025 и 2025-04-03. Что делать?
cleaning - 54
Вы нашли экстремальные выбросы в суммах заказов. Удалять их или оставить?
outliers - 55
Зачем документировать шаги чистки данных и как вы это делаете?
cleaning - 56
Как после чистки датасета убедиться, что вы ничего не сломали?
validation - 57
Нужно склеить два списка клиентов, но ID между системами совпадают не полностью. Ваши действия?
system-design - 58
Точные дубликаты найти легко. А как ловить почти-дубликаты, например одного клиента, заведённого дважды?
dedup - 59
Чем категориальные данные отличаются от числовых и почему это важно?
data-types - 60
В чём разница между дискретными и непрерывными переменными?
data-types - 61
Какими измерениями вы бы описали качество датасета?
quality - 62
Как вы обеспечиваете качество данных в своих анализах?
quality - 63
Как проверить, что колонка действительно уникальный идентификатор?
schema - 64
Какие проблемы возникают, когда числа хранятся как текст?
data-types - 65
Как вы выбираете подходящий тип графика для данных?
chart-choice - 66
Когда использовать столбчатую диаграмму, а когда линейный график?
charts - 67
За что так критикуют круговые диаграммы и когда они допустимы?
charts - 68
Какими способами график может вводить в заблуждение, даже ненамеренно?
chart-integrity - 69
Что делает дашборд по-настоящему полезным для бизнес-пользователя?
dashboards - 70
Как следует использовать цвет в графиках?
charts - 71
В чём разница между гистограммой и столбчатой диаграммой?
distributionscharts - 72
Что показывает диаграмма рассеяния и когда вы её используете?
charts - 73
На графике стейкхолдера 12 линий, и его никто не может прочитать. Как вы это исправите?
stakeholder-managementcommunication - 74
Чем ваша подача одного и того же анализа отличается для топ-менеджера и для коллеги-аналитика?
- 75
Чем DataFrame в pandas отличается от Series?
pandas - 76
Вам прислали новый CSV-файл. Какие первые шаги в pandas?
pandas - 77
Как отфильтровать строки в pandas, например заказы дороже 100 из Германии?
pandas - 78
Как работает groupby в pandas?
pandas - 79
Как соединить два DataFrame в pandas?
pandasjoins - 80
Как вы работаете с пропущенными значениями в pandas?
missing-datapandas - 81
Что даёт df.describe() и в чём его ограничения?
- 82
Для чего вы используете value_counts()?
pandas - 83
В чём разница между loc и iloc в pandas?
pandas - 84
Когда вы берёте Python вместо Excel или SQL?
sqlpythonexcel - 85
Что такое конверсия и как её посчитать?
conversion - 86
Что такое удержание и отток и почему они важны?
retentionchurn - 87
Что такое ARPU и средний чек и чем они различаются?
revenue - 88
Что такое DAU и MAU и о чём говорит их отношение?
active-users - 89
Что такое анализ воронки?
funnel - 90
Что делает метрику хорошим KPI?
monitoring - 91
Ключевая метрика за ночь упала на 20 процентов. Ваши первые шаги?
monitoring - 92
Выручка стоит на месте, но бизнес чувствует, что что-то изменилось. Как разложить выручку, чтобы это найти?
decomposition - 93
Как вы объясняете техническую находку нетехническому стейкхолдеру?
communicationstakeholder-management - 94
Как вы структурируете письменное резюме анализа?
- 95
Стейкхолдер задаёт вопрос, на который ваши данные ответить не могут. Что вы делаете?
stakeholder-managementcommunication - 96
Как вы сообщаете о неопределённости в цифрах, не теряя аудиторию?
communication - 97
Руководитель говорит: посмотри наши продажи. Что вы сделаете до того, как открыть хоть одну таблицу?
analysis - 98
Три команды одним утром присылают вам срочные запросы. Как расставить приоритеты?
prioritization - 99
Вы обнаружили ошибку в отчёте, который уже разослали. Что делаете?
ownership - 100
Как вы развиваете свои навыки как junior-аналитик?