6 октября 2026

SQL для аналитика данных: что учить, как применять и как пройти собеседование в 2026

SQL (Structured Query Language — язык структурированных запросов) — основной рабочий инструмент аналитика данных. Это декларативный язык запросов к реляционным базам данных: вы описываете нужный результат, а система управления базами данных (СУБД) сама определяет способ его получения. По данным hh.ru о навыках ИТ-рынка за 2026 год, SQL для аналитика входит в топ-3 востребованных компетенций. При этом базовый SELECT знают все — реальный дефицит среди специалистов с оконными функциями, CTE и умением строить аналитические запросы. В статье — уровни навыков, SQL для финансового аналитика и подготовка к собеседованию.

Аналитик данных за ноутбуком с SQL-кодом на мониторе

Что такое SQL и зачем он нужен аналитику

SQL создан в 1974 году в IBM, актуальный стандарт — SQL:2023. Декларативность языка — ключевая особенность: аналитик описывает нужную выборку, а СУБД (PostgreSQL, ClickHouse, BigQuery, MySQL) выполняет её сама. Реляционная база данных хранит данные в таблицах, связанных через первичные и внешние ключи.

image

Сделайте следующий шаг в карьере

Подберите обучение, которое поможет освоить новые компетенции

Выбрать курс

Главное преимущество перед Excel — масштаб и скорость: SQL обрабатывает миллиарды строк за секунды там, где таблица зависнет или упадёт. Запросы автоматизируются, результаты воспроизводятся без ручной работы. Простейший пример — выборка пользователей из Москвы:

SELECT user_id, country

FROM users

WHERE city = ‘Москва’;

Для подключения к базе аналитики используют DBeaver или командную строку — СУБД выступает посредником между запросом и физическими данными на диске.

Карта навыков SQL-аналитика: от новичка до эксперта

SQL-компетенции делятся на три уровня: Джун, Мидл, Сениор. Переход между ними определяется не временем в профессии, а конкретными инструментами в арсенале — каждый уровень открывает новый класс задач. Подробнее о самой профессии — в материале о карьере аналитика данных.

Карта навыков SQL аналитика данных по уровням Джун Мидл Сениор

Базовый уровень — выборка, фильтрация и группировка

Джун-аналитик работает с пятью базовыми блоками: SELECT / WHERE / ORDER BY / LIMIT / DISTINCT — выборка с фильтрацией и сортировкой; GROUP BY + агрегатные функции COUNT, SUM, AVG — первая аналитика; INNER JOIN и LEFT JOIN — соединение нескольких таблиц.

Отдельная тема — типы данных: INT, VARCHAR, DATE, TIMESTAMP. Ошибки с типами ломают запросы ещё до группировки.

Принципиальный момент: WHERE фильтрует строки до группировки и не видит агрегатных функций. HAVING — фильтрует готовые группы после GROUP BY. Типичная ошибка: WHERE COUNT(*) > 100 — синтаксически неверно; правильно — HAVING COUNT(*) > 100. Чтобы отсортировать по дате — ORDER BY date DESC: ORDER BY выполняется ближе к концу цепочки запроса и поэтому недоступен в WHERE.

Продвинутый уровень — оконные функции, CTE и работа с NULL

Главный переход Джун→Мидл — оконные функции. В отличие от GROUP BY, они не схлопывают строки в результате: каждая строка остаётся, рядом добавляется вычисленное значение.

CTE (обобщённое табличное выражение, WITH имя AS (подзапрос)) — конструкция для многошаговых запросов. Читается сверху вниз как шаги алгоритма и упрощает отладку. CTE решает ключевое ограничение оконных функций: их нельзя применять напрямую в WHERE или HAVING — нужно завернуть результат в CTE и уже к ней применять фильтр.

NULL в SQL — «неизвестное значение»: не ноль и не пустая строка. Сравнение = NULL не работает, только IS NULL. Ловушка: NOT IN (подзапрос) с NULL в подзапросе возвращает пустой результат — безопасная замена NOT EXISTS.

Оконные функции SQL: три класса и ключевые ограничения

Оконные функции работают по синтаксису OVER(PARTITION BY … ORDER BY …). PARTITION BY делит строки на группы-«окна»; ORDER BY задаёт порядок внутри окна для ранжирования или накопления. Ключевое отличие от GROUP BY — детализация сохраняется, строки не схлопываются. Ограничение: результат нельзя фильтровать в WHERE — нужен CTE.

Если хотите освоить оконные функции и когортный анализ на реальных бизнес-данных — посмотрите программу Data-аналитик: Python и SQL в анализе данных от ProfiFuture: около 8 недель обучения с господдержкой 75%.

Ранжирование, смещение и агрегирование — три класса оконных функций

Ранжирование — три функции с разным поведением при одинаковых значениях:

Функция
Поведение при ничьей
Пример: позиции
ROW_NUMBER() Уникальный номер всегда 1, 2, 3, 4
RANK() Пропускает номера после ничьей 1, 2, 2, 4
DENSE_RANK() Не пропускает номера 1, 2, 2, 3

Смещение — LAG() возвращает значение предыдущей строки, LEAD() — следующей. Применение: прирост выручки день к дню без самосоединения таблицы:

LAG(revenue) OVER (ORDER BY date) AS prev_revenue

Агрегирование — SUM() OVER(ORDER BY date) даёт накопительный итог; AVG() OVER(… ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) — скользящее среднее за 7 дней.

JOIN, NULL и порядок выполнения SQL-запроса

JOIN соединяет таблицы по условию. INNER — только совпадения; LEFT — все строки левой таблицы и NULL справа при отсутствии совпадения; FULL — все строки обеих таблиц; CROSS — декартово произведение. Типичная ошибка — пропущенный ON: строк в результате резко больше ожидаемого. NULL обрабатывается особо: COALESCE(поле, 0) заменяет NULL на значение по умолчанию, NULLIF(знаменатель, 0) защищает от деления на ноль.

Параметр
GROUP BY
Оконные функции
Строки в результате Схлопывает в N групп Сохраняет все строки
Детализация Теряется Сохраняется
Использование в WHERE Да Нет — только через CTE
Типичная задача Итоги по категориям Ранжирование, накопитель, LAG

Порядок выполнения запроса: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT. Именно поэтому алиас, объявленный в SELECT, недоступен в WHERE — он создаётся позже. Первичный ключ уникально идентифицирует строку таблицы; внешний ключ ссылается на первичный ключ другой — основа любого JOIN.

SQL для финансового аналитика: специфика задач и SQL-паттерны

Финансовый аналитик решает другой класс задач: P&L (отчёт о прибылях и убытках), сравнение план/факт, анализ дебиторской задолженности, динамика бюджета по периодам. Эта специализация практически не встречается в стандартных SQL-материалах.

Пять типовых SQL-паттернов финансиста:

  1. Структура расходов — GROUP BY статья_затрат, DATE_TRUNC(‘month’, дата) + SUM(сумма) по каждой комбинации.
  2. Отклонение план/факт — JOIN таблиц плана и факта по категории и периоду + CASE WHEN факт > план THEN ‘превышение’ для флагов.
  3. Динамика MoM — LAG(сумма) OVER (ORDER BY DATE_TRUNC(‘month’, дата)) — прирост месяц к месяцу.
  4. Дебиторская задолженность — LEFT JOIN + DATEDIFF(текущая_дата, дата_счёта) для группировки по срокам просрочки.
  5. Скользящий итог бюджета — SUM(сумма) OVER (ORDER BY месяц) — накопительное исполнение.

Связка LAG() + DATE_TRUNC — ключевой паттерн для анализа финансовых данных на SQL в любой временно́й задаче.

Схема SQL-таблиц план и факт для финансового анализа данных

Пора сменить профессию? Начните с понятного плана

Подберите программу под ваш опыт, цели и желаемый формат занятости

  • Востребованные навыки без лишней теории.
  • Поддержку экспертов на каждом этапе
  • Помощь с выходом на рынок труда
Подобрать обучение
image

Подготовка к SQL-собеседованию аналитика

Собеседование по SQL для аналитика проходит в трёх форматах: теоретические вопросы, задачи вживую в редакторе и разбор чужого кода с поиском ошибок. Уровень кандидата проверяется разными темами — Джун, Мидл и Сениор получают принципиально разные вопросы.

Топ-5 тем SQL-собеседования с уровнями Джун Мидл Сениор

Типовые вопросы и разбор задач по уровням

Джун: WHERE vs HAVING, INNER vs LEFT JOIN, зачем DISTINCT.

Мидл: RANK vs ROW_NUMBER vs DENSE_RANK, NULL в NOT IN, когортный анализ с расчётом Retention Rate.

Сениор: EXPLAIN / EXPLAIN ANALYZE, индексы, чтение плана запроса.

Три классические задачи по SQL для собеседования аналитика:

  • Топ-3 покупателя за месяц — CTE для фильтрации периода + DENSE_RANK() по сумме покупок, WHERE rn <= 3 во внешнем запросе.
  • Retention Rate — DATE_TRUNC(‘month’, первая_покупка) для определения когорты + LEFT JOIN по последующим периодам + расчёт доли вернувшихся.
  • План vs факт — JOIN двух таблиц по категории и периоду + CASE WHEN для флагов отклонений.

Когортный анализ — классическое тестовое задание для мидл-уровня на SQL-собеседовании. Разбирайте паттерн заранее, не на самом интервью.

Частые ошибки SQL-кандидатов на собеседовании

Пять ошибок, которые стоят офферов:

  • SELECT * в продакшн-запросах — медленно и ломает схему при изменении структуры таблицы.
  • Пропущен ON в JOIN — декартово произведение: строк резко больше ожидаемого.
  • WHERE COUNT(*) > 100 — синтаксическая ошибка; правильно: HAVING COUNT(*) > 100.
  • Деление целых чисел: 5/20 = 0 — нужно 5::NUMERIC/20 или 5*1.0/20.
  • NOT IN с NULL в подзапросе — пустой результат; замена: NOTEXISTS.

Где и как изучать SQL аналитику: тренажёры, курсы и книги

Ресурс
Тип
Уровень
Бесплатно
Диалект
Stepik «Интерактивный тренажёр по SQL» Тренажёр Джун Да PostgreSQL
SQL Academy Тренажёр Джун–Мидл Да PostgreSQL
LearnSQL.com Тренажёр Джун–Мидл Частично PostgreSQL/MySQL
«Learning SQL» О’Рейли Книга Джун–Мидл Нет PostgreSQL
Официальная документация PostgreSQL Документация Мидл–Сениор Да PostgreSQL

Диалект для старта — PostgreSQL: максимально близок к стандарту ANSI SQL, широко применяется в аналитике. После его освоения 90% знаний переносится в ClickHouse (OLAP-задачи для крупных аналитических хранилищ) и BigQuery (Google Cloud — здесь плата за прочитанные данные меняет культуру написания запросов). Не распыляйтесь на несколько диалектов одновременно.

Главный принцип: SQL для аналитика усваивается только через практику на реальных данных, а не через чтение теории. Если рядом с SQL в вашем стеке стоит Excel — полезно изучить и Excel для аналитика данных.

Часто задаваемые вопросы

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

Базовый набор: SELECT, WHERE, ORDER BY, LIMIT, DISTINCT — выборка с фильтрацией. GROUP BY + COUNT/SUM/AVG — агрегация. INNER JOIN и LEFT JOIN — соединение таблиц. HAVING — фильтрация по агрегатам. Этот набор покрывает около 80% задач джун-аналитика: выгрузки, сегментация клиентов, отчёты по продажам. Ошибки с типами данных (INT vs VARCHAR, DATE vs TIMESTAMP) разбирайте с первых занятий.

Чем оконные функции отличаются от GROUP BY?

GROUP BY схлопывает группу строк в одну — детализация теряется. Оконная функция вычисляет значение по «окну» строк и сохраняет все исходные строки. ROW_NUMBER(), SUM() OVER, LAG() работают без уменьшения числа строк в результате. Накопительный итог, ранжирование внутри группы или прирост день/день требуют именно оконных функций, а не GROUP BY.

В чём разница WHERE и HAVING в SQL-запросах?

WHERE фильтрует строки до группировки и не работает с агрегатами. HAVING фильтрует готовые группы после GROUP BY и применяется к агрегатным функциям — COUNT(*), SUM(amount). Порядок выполнения: FROM → WHERE → GROUP BY → HAVING. Типичная ошибка: WHERE COUNT(*) > 100 — синтаксически неверно; правильно — HAVING COUNT(*) > 100. Условия на обычные поля — в WHERE, на агрегаты — в HAVING.

Почему NOT IN с NULL возвращает пустой результат?

NULL означает «неизвестное значение». Любое сравнение с NULL даёт не TRUE и не FALSE, а UNKNOWN. Если подзапрос в NOT IN содержит хотя бы один NULL, условие становится UNKNOWN для всех строк — фильтр не пропускает ни одной строки. Безопасная замена — NOT EXISTS: корректно обрабатывает NULL и возвращает ожидаемый результат.

Какие задачи по SQL проверяют на собеседовании аналитика?

Три класса: базовые выборки (SELECT + JOIN + агрегация), ранжирование (топ-N через CTE + DENSE_RANK), временные ряды (LAG() для прироста MoM, скользящее среднее через SUM() OVER с рамкой). Для мидл-позиций добавляется когортный анализ — Retention Rate через DATE_TRUNC + LEFT JOIN. Финансовым аналитикам — план vs факт через JOIN с CASE WHEN для флагов.

Как SQL применяется в когортном анализе?

Когортный анализ группирует пользователей по дате первого события — регистрации или первой покупки. Стандартный SQL-паттерн: DATE_TRUNC для округления дат до недели или месяца → LEFT JOIN для сопоставления периодов когорты → агрегация для расчёта Retention Rate. Результат — матрица «когорта × период» с долей вернувшихся пользователей. Классическое тестовое задание мидл-уровня на SQL-собеседовании.

Какой диалект SQL выбрать аналитику данных?

Начинайте с PostgreSQL: максимально близок к стандарту ANSI SQL, широко применяется в аналитике, хорошо задокументирован. После освоения 90% знаний переносится в MySQL, ClickHouse и BigQuery. ClickHouse изучайте для OLAP-хранилищ с большими объёмами данных, BigQuery — при работе в Google Cloud. Не распыляйтесь на несколько диалектов одновременно — освойте один до уровня мидл.

Как выбрать курс по SQL для аналитика данных?

Ключевые критерии: практика на реальных данных, а не только синтаксис; охват оконных функций и CTE; задачи на когортный анализ. Тренажёры дают синтаксис, полноценные курсы — аналитическое мышление и разбор реальных кейсов. Оптимальный диалект для старта — PostgreSQL. Курс должен включать продвинутые конструкции, а не только базовые SELECT, чтобы подготовить к рынку труда в 2026 году.

Превратите интерес к теме в новую профессию

Оставьте заявку — поможем выбрать программу и расскажем об условиях обучения

Оставить заявку
icon