SQL для аналитика данных — что нужно знать

Коротко

SQL — навык номер один для аналитика данных. Его спрашивают на каждом собеседовании, в каждой компании, на любом уровне — от джуна до сеньора. Без уверенного SQL на работу аналитиком не возьмут, даже если вы отлично знаете Python и статистику.

Почему SQL — главный навык аналитика

Данные компаний хранятся в реляционных базах. Аналитик каждый день пишет запросы: считает метрики, строит отчёты, проверяет гипотезы, отвечает на вопросы бизнеса. SQL — единственный инструмент, который работает везде: в PostgreSQL, ClickHouse, BigQuery, Redshift, Snowflake.

На собеседованиях SQL проверяют в 95% случаев. Python — в 40–60%. Если на подготовку мало времени, SQL должен быть первым и главным приоритетом.

Темы по уровням

Junior

Минимум, чтобы пройти собеседование на начальную позицию:

  • SELECT, WHERE — выборка и фильтрация данных
  • JOIN — объединение таблиц. INNER, LEFT, RIGHT, FULL — нужно знать разницу и понимать, когда какой использовать
  • GROUP BY, HAVING — агрегация по группам. Частая ошибка новичков — путать WHERE и HAVING
  • ORDER BY, LIMIT — сортировка и ограничение выборки
  • Агрегатные функции — COUNT, SUM, AVG, MIN, MAX
  • Порядок выполнения SQL-запроса — FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT. Это спрашивают почти на каждом собеседовании

На этом уровне нужно уверенно писать запросы с несколькими JOIN и группировкой. Без подглядывания в шпаргалку.

Middle

То, что отличает уверенного аналитика от новичка:

  • Оконные функции — ROW_NUMBER, RANK, DENSE_RANK, LAG, LEAD, SUM OVER, AVG OVER. Самая популярная тема на собеседованиях для мидлов. Нужно знать разницу между GROUP BY и PARTITION BY
  • CTE (WITH) — Common Table Expressions для читаемых сложных запросов
  • Подзапросы — в WHERE, FROM, SELECT. Когда CTE лучше подзапроса, а когда наоборот
  • CASE WHEN — условная логика внутри запроса
  • Функции работы с датами — DATE_TRUNC, DATE_PART, EXTRACT, интервалы. Аналитик работает с датами в каждом втором запросе
  • COALESCE, NULLIF — обработка NULL-значений

Senior

Глубокое понимание, которое приходит с опытом:

  • Оптимизация запросов — EXPLAIN ANALYZE, чтение плана выполнения, понимание стоимости операций
  • Индексы — как работают B-tree индексы, когда индекс ускоряет запрос, а когда нет
  • Сложные аналитические запросы — retention, воронки, когортный анализ, декомпозиция выручки, результаты A/B-тестов
  • Оптимизация JOIN — порядок таблиц, типы соединений (Nested Loop, Hash Join, Merge Join)

Что аналитику НЕ нужно

Не тратьте время на темы из мира DBA и backend-разработки:

  • DDL — CREATE TABLE, ALTER TABLE, DROP (аналитик работает с существующими таблицами)
  • Хранимые процедуры и триггеры — это задачи разработчиков
  • Репликация и шардирование — задачи DBA
  • Администрирование СУБД — настройка, бэкапы, мониторинг

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

Какую СУБД учить

PostgreSQL — стандарт для аналитиков. Большинство собеседований проводятся на PostgreSQL-синтаксисе. Учите именно его.

Потом, на работе, пригодятся:

  • ClickHouse — быстрая колоночная база для больших данных. Популярна в Яндексе, VK, Озоне
  • BigQuery — облачное хранилище Google. Используют стартапы и компании на GCP
  • Redshift / Snowflake — облачные DWH, встречаются реже в русскоязычных компаниях

Синтаксис отличается в деталях, но основа одна — выучив PostgreSQL, адаптироваться к другим СУБД легко.

Задачи, которые аналитик решает на SQL

SQL — не абстрактный навык. Вот реальные задачи, которые аналитик решает каждую неделю:

  • Retention — сколько пользователей возвращается на D1, D7, D30
  • Воронки конверсии — сколько людей проходит каждый шаг от регистрации до покупки
  • Когортный анализ — как ведут себя пользователи в зависимости от даты регистрации
  • Декомпозиция выручки — почему выручка упала: меньше пользователей, ниже средний чек или реже покупают
  • Результаты A/B-тестов — подсчёт метрик по контрольной и тестовой группам
  • Ad-hoc запросы — «Сколько пользователей из Москвы купили подписку за последний месяц?»

Каждая из этих задач сводится к комбинации JOIN, GROUP BY, оконных функций и подзапросов. Именно поэтому эти темы спрашивают на собеседованиях.

Типичные ошибки новичков

  1. Учить синтаксис, а не логику. Запомнить SELECT ... FROM ... WHERE — мало. Нужно понимать, в каком порядке база выполняет запрос и почему результат именно такой
  2. Игнорировать NULL. NULL — не ноль и не пустая строка. NULL = NULL возвращает не TRUE, а NULL. Это ломает JOIN и фильтрацию
  3. Путать WHERE и HAVING. WHERE фильтрует строки до группировки, HAVING — после
  4. Не использовать CTE. Длинный запрос с вложенными подзапросами — нечитаемый. CTE делает тот же запрос понятным
  5. Бояться оконных функций. Многие откладывают их «на потом» и проваливаются на собеседовании. Оконные функции проще, чем кажутся — их нужно просто попрактиковать

Как тренироваться

Теория без практики не работает. SQL нужно писать руками — каждый день, хотя бы по 15–20 минут.

План изучения:

  1. Неделя 1–2: SELECT, WHERE, JOIN, GROUP BY. Решайте простые задачи, пока не станет автоматизмом
  2. Неделя 3–4: Подзапросы, CTE, CASE WHEN, функции дат
  3. Неделя 5–6: Оконные функции. Начните с ROW_NUMBER и LAG, потом SUM OVER и рамки
  4. Неделя 7–8: Комплексные задачи — retention, воронки, когорты

Тренироваться можно в SQL-тренажёре Карьерника — там 200+ вопросов по SQL с разборами, от базовых до сложных. 15 минут в день в Telegram достаточно, чтобы подготовиться за 4–6 недель. Больше примеров вопросов с собеседований — на странице с примерами.

Вопросы с собеседований

В чём разница между WHERE и HAVING? — WHERE фильтрует строки до группировки (GROUP BY), HAVING — после. В WHERE нельзя использовать агрегатные функции, в HAVING — можно. Например, HAVING COUNT(*) > 5 отберёт только группы с более чем 5 записями.

Чем LEFT JOIN отличается от INNER JOIN? — INNER JOIN возвращает только строки, для которых есть совпадение в обеих таблицах. LEFT JOIN возвращает все строки из левой таблицы, даже если совпадения нет — в этом случае столбцы правой таблицы будут NULL.

Что такое оконная функция и чем она отличается от GROUP BY? — GROUP BY схлопывает строки в одну на группу. Оконная функция вычисляет значение по группе, но не убирает строки — каждая строка остаётся в результате. Это позволяет одновременно видеть и детальные данные, и агрегат.

Как найти дубликаты в таблице? — GROUP BY по столбцам, в которых ищем дубликаты, затем HAVING COUNT(*) > 1. Или ROW_NUMBER() OVER (PARTITION BY ...) — строки с номером больше 1 и есть дубликаты.

В каком порядке SQL выполняет запрос? — FROM → JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT. Из-за этого нельзя использовать алиас из SELECT в WHERE, но можно в ORDER BY.

FAQ

Сколько времени нужно на изучение SQL для аналитика?

4–8 недель при ежедневных занятиях по 30–60 минут. За первые 2 недели можно освоить базу (SELECT, JOIN, GROUP BY), за следующие 2 — подзапросы и CTE, ещё 2–4 недели — оконные функции и сложные задачи. Главное — ежедневная практика, а не объём за раз.

Что важнее — SQL или Python?

SQL. Его спрашивают на 95% собеседований аналитика, Python — на 40–60%. SQL покрывает 80% рабочих задач аналитика. Python добавляйте после того, как уверенно пишете сложные SQL-запросы.

Хватит ли онлайн-тренажёров для подготовки?

Тренажёры — отличный инструмент для закрепления синтаксиса и типовых паттернов. Но для полноценной подготовки к собеседованию добавьте практику на реальных задачах: посчитайте retention, постройте воронку, напишите когортный анализ. Комбинация тренажёра и реальных задач даёт лучший результат.


Тренируйтесь решать задачи по SQL — откройте тренажёр с 1500+ вопросами.