Skip to content

Вопросы на собеседовании: Аналитик данных

100 реальных вопросов с образцовыми ответами и пояснениями для уровня Junior.

Смотреть пример резюме: Аналитик данных

Тренировка флешкарточками

Интервальное повторение · Hunter Pass

Вопросы

sql

Базовый оператор SELECT извлекает данные из одной или нескольких таблиц.

  • FROM задаёт исходную таблицу, а WHERE фильтрует отдельные строки.
  • GROUP BY формирует группы, а HAVING фильтрует их после агрегации.
  • ORDER BY сортирует результат, а LIMIT ограничивает число возвращаемых строк.
  • Логический порядок частей запроса помогает понять результат и правильно разместить фильтры.

Зачем это спрашивают: Интервьюер проверяет понимание структуры запроса и порядка его выполнения, а не умение скопировать запрос из туториала.

queriesaggregation

WHERE фильтрует строки до группировки, а HAVING фильтрует агрегированные группы.

  • WHERE country = 'DE' оставляет только строки по Германии до агрегации.
  • HAVING SUM(revenue) > 1000 оставляет группы с суммой больше 1000.
  • На этапе выполнения WHERE агрегатных значений ещё не существует.
  • Условия по строкам задают в WHERE, а условия по агрегатам в HAVING.

Зачем это спрашивают: Эта классика отсеивает кандидатов, которые вызубрили синтаксис, но не понимают порядок обработки запроса в SQL.

aggregation

GROUP BY объединяет строки с одинаковыми значениями, чтобы рассчитывать агрегаты по каждой группе.

  • Группировка заказов по customer_id создаёт одну итоговую группу на клиента.
  • После этого SUM(amount) может посчитать суммарные траты каждого клиента.
  • Без GROUP BY агрегат рассчитывается по всему набору результатов.
  • Колонки в SELECT должны входить в группировку или агрегатную функцию.

Зачем это спрашивают: Понимание гранулярности агрегации - самый частый источник неверных цифр в SQL у джунов, поэтому интервьюеры проверяют его в первую очередь.

joins

INNER JOIN оставляет только совпавшие строки, а LEFT JOIN сохраняет все строки левой таблицы.

  • INNER JOIN удаляет строки слева, для которых нет совпадения справа.
  • LEFT JOIN заполняет правые колонки значениями NULL, если совпадения нет.
  • Клиент без заказов исчезнет из результата INNER JOIN.
  • Неверно выбранный JOIN может незаметно изменить количества и суммы.

Зачем это спрашивают: Сильный кандидат объясняет практическое следствие для числа строк и итогов, а не только определение из учебника.

sqlqueries

Чтобы найти топ-10 клиентов, нужно агрегировать выручку по клиентам и отсортировать её по убыванию.

  • Выбираем customer_id и SUM(amount) из таблицы orders.
  • Группируем по customer_id, чтобы получить одну сумму выручки на клиента.
  • Сортируем алиас выручки по убыванию и применяем LIMIT 10.
  • Перед финальным рейтингом уточняем, считать выручку до или после возвратов.

Зачем это спрашивают: Базовая рабочая задача, где интервьюер ждёт связку GROUP BY, ORDER BY и LIMIT плюс уточняющий вопрос про определение выручки.

schema

Подсчёт всех строк учитывает каждую строку, а COUNT(column) не учитывает NULL в указанной колонке.

  • Результаты совпадут, только если в выбранной колонке нет NULL.
  • После LEFT JOIN клиент без заказов всё равно даёт одну присоединённую строку.
  • COUNT(orders.id) корректно вернёт для такого клиента ноль заказов.
  • Подсчёт всех присоединённых строк незаметно завысил бы результат.

Зачем это спрашивают: Вопрос отсеивает тех, кто не знает, как NULL взаимодействует с подсчётом, а это ежедневная забота в реальной отчётности.

aggregation

Основные агрегатные функции сводят множество строк к полезным статистикам.

  • COUNT считает строки или значения не NULL, а SUM складывает числа.
  • AVG вычисляет среднее арифметическое, а MIN и MAX возвращают крайние значения.
  • GROUP BY рассчитывает эти показатели отдельно для категорий, например стран.
  • Все стандартные агрегаты, кроме подсчёта всех строк, пропускают NULL.

Зачем это спрашивают: Проверяется базовая беглость в повседневном словаре агрегации, включая оговорку про NULL.

distinct

DISTINCT удаляет дубликаты из результата и оставляет каждую комбинацию выбранных значений один раз.

  • Он применяется ко всей комбинации выбранных колонок, а не только к первой.
  • SELECT DISTINCT для одной колонки возвращает её уникальные значения.
  • COUNT(DISTINCT customer_id) считает уникальных покупателей, а не заказы.
  • Используйте DISTINCT осознанно, поскольку он может скрыть созданные запросом дубликаты.

Зачем это спрашивают: Интервьюер ждёт пример про уникальных покупателей против заказов, который показывает применение DISTINCT к реальному бизнес-вопросу.

schema

ORDER BY последовательно сортирует данные по каждой перечисленной колонке.

  • Первая колонка задаёт основной порядок, а следующие разрешают равенства.
  • По умолчанию сортировка идёт по возрастанию, а DESC меняет её на убывание.
  • ORDER BY country, revenue DESC ранжирует выручку внутри каждой страны.
  • Без ORDER BY база данных не гарантирует порядок строк.

Зачем это спрашивают: Последний пункт про негарантированный порядок отличает тех, кого реальные базы уже кусали, от тех, кто с этим не сталкивался.

sqlfundamentals

NULL обозначает отсутствующее или неизвестное значение в SQL, а не ноль или пустую строку.

  • Сравнение через знак равенства с NULL не даёт истинного результата.
  • Для поиска пропусков используют IS NULL, а для их исключения IS NOT NULL.
  • NULL может влиять на совпадения в JOIN и результаты агрегатов.
  • Перед выводами проверяйте долю NULL в ключевых колонках.

Зачем это спрашивают: Проверяется понимание трёхзначной логики на практике, ведь ошибка с = NULL даёт тихо пустые результаты.

sql

Дубликаты можно найти группировкой по колонкам, которые должны быть уникальными.

  • Группируем по предполагаемому ключу, например email, и считаем строки.
  • Через HAVING оставляем значения, для которых COUNT больше единицы.
  • Результат покажет каждый задублированный ключ и частоту его появления.
  • Для просмотра полных строк присоединяем результат обратно или используем ROW_NUMBER.

Зачем это спрашивают: Практическая база; сильный кандидат выдаёт паттерн GROUP BY плюс HAVING без запинки.

subqueries

Подзапрос представляет собой SQL-запрос, вложенный в другой запрос.

  • В зависимости от задачи он может находиться в FROM, WHERE или SELECT.
  • Например, с ним можно сравнить траты каждого клиента с рассчитанным внутри средним.
  • Подзапросы удобны для короткой одноразовой логики.
  • Если вложенность мешает чтению, лучше заменить её на CTE.

Зачем это спрашивают: Интервьюер хочет услышать конкретный сценарий применения и понимание, когда подзапросы вредят читаемости.

ctesubqueries

CTE представляет собой именованный временный результат, объявленный через WITH для использования в основном запросе.

  • Он позволяет читать сложный запрос как последовательность понятных шагов.
  • В одном CTE можно очистить данные, а в следующем агрегировать их.
  • Основной запрос обращается к каждому CTE почти как к таблице.
  • Структура сверху вниз упрощает отладку и код-ревью.

Зачем это спрашивают: Показывает, пишете ли вы SQL, который смогут поддерживать коллеги, а это важнее хитрых однострочников.

union

UNION и UNION ALL вертикально объединяют результаты запросов с совместимой структурой.

  • Каждый запрос должен возвращать одинаковое число колонок совместимых типов.
  • UNION удаляет дубликаты строк из общего результата.
  • UNION ALL сохраняет все строки и не тратит ресурсы на дедупликацию.
  • Выбирайте UNION ALL, если пересечение невозможно или дубликаты имеют смысл.

Зачем это спрашивают: Хороший ответ покрывает и семантическую разницу, и последствия для производительности.

queries

LIKE фильтрует текст, сопоставляя его с шаблоном.

  • Знак процента соответствует любой последовательности символов.
  • Знак подчёркивания соответствует ровно одному символу.
  • Шаблон, оканчивающийся на @gmail.com, позволяет найти адреса Gmail.
  • Для поиска без учёта регистра используйте ILIKE или текст в нижнем регистре.

Зачем это спрашивают: Оговорка про чувствительность к регистру отличает кандидатов, которые реально чистили грязные текстовые данные.

queries

CASE WHEN добавляет условную логику в SQL-выражение.

  • С его помощью суммы можно разметить как малые, средние или крупные.
  • Он позволяет считать условные итоги, возвращая сумму только для оплаченных строк.
  • ELSE обрабатывает строки, не подошедшие ни под одно условие.
  • CASE можно использовать в SELECT, WHERE, GROUP BY и ORDER BY.

Зачем это спрашивают: Паттерн условного агрегата выдаёт человека, который строил настоящие сводные отчёты на SQL.

foreign-keysprimary-keys

Первичный ключ идентифицирует каждую строку, а внешний связывает строки через ключ, на который ссылается.

  • Первичный ключ должен быть уникальным и не содержать NULL ни в одной строке.
  • Внешний ключ ссылается на первичный ключ или ключ с ограничением UNIQUE, часто в другой таблице.
  • Значения внешнего ключа могут повторяться и быть NULL, если это не запрещено дополнительными ограничениями; orders.customer_id может ссылаться на customers.id.
  • По этим ограничениям аналитик понимает пути соединения, кардинальность связей и гранулярность таблиц.

Зачем это спрашивают: Интервьюер проверяет, читаете ли вы схему как карту джойнов и гранулярности, а не как список таблиц.

joins

Повторяющиеся ключи соединения могут привести к тому, что JOIN вернёт больше строк, чем любая из исходных таблиц.

  • SQL возвращает каждую совпавшую пару, а не одну строку на исходную запись.
  • Если ключ встречается дважды слева и трижды справа, JOIN вернёт шесть совпавших строк.
  • Агрегация повторившихся сумм после такого соединения может завысить выручку или другие итоги.
  • До соединения проверяйте уникальность ключей и ожидаемую кардинальность связи, а после него сравнивайте число строк.

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

queries

Для выбора последних 30 дней колонку с датой сравнивают с текущей датой минус 30-дневный интервал.

  • В PostgreSQL можно написать order_date >= CURRENT_DATE - INTERVAL '30 days'.
  • В MySQL и BigQuery синтаксис вычитания дат отличается.
  • До фильтрации уточните, хранится в поле дата или таймстемп.
  • Проверьте часовой пояс и правила границ, чтобы включить нужные дни.

Зачем это спрашивают: Фильтрация по датам выглядит тривиально, но прячет ловушки часовых поясов и границ, и интервьюер хочет увидеть эту осознанность.

queries

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-аналитик?