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, оконных функций и подзапросов. Именно поэтому эти темы спрашивают на собеседованиях.
Типичные ошибки новичков
- Учить синтаксис, а не логику. Запомнить
SELECT ... FROM ... WHERE— мало. Нужно понимать, в каком порядке база выполняет запрос и почему результат именно такой - Игнорировать NULL. NULL — не ноль и не пустая строка.
NULL = NULLвозвращает не TRUE, а NULL. Это ломает JOIN и фильтрацию - Путать WHERE и HAVING. WHERE фильтрует строки до группировки, HAVING — после
- Не использовать CTE. Длинный запрос с вложенными подзапросами — нечитаемый. CTE делает тот же запрос понятным
- Бояться оконных функций. Многие откладывают их «на потом» и проваливаются на собеседовании. Оконные функции проще, чем кажутся — их нужно просто попрактиковать
Как тренироваться
Теория без практики не работает. SQL нужно писать руками — каждый день, хотя бы по 15–20 минут.
План изучения:
- Неделя 1–2: SELECT, WHERE, JOIN, GROUP BY. Решайте простые задачи, пока не станет автоматизмом
- Неделя 3–4: Подзапросы, CTE, CASE WHEN, функции дат
- Неделя 5–6: Оконные функции. Начните с ROW_NUMBER и LAG, потом SUM OVER и рамки
- Неделя 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+ вопросами.