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

Практический путь изучения SQL: SELECT, JOIN, агрегации, оконные функции, типичные ошибки и задачи с собеседований.
SQL с нуля: минимальный набор для аналитика
SQL — самый быстроокупаемый технический навык: две недели практики дают возможность самостоятельно доставать данные, не завися от коллег.
Порядок изучения
| Шаг | Что осваиваем | Время |
|---|---|---|
| 1 | SELECT, WHERE, ORDER BY, LIMIT | 2–3 дня |
| 2 | Агрегации: COUNT, SUM, AVG, GROUP BY, HAVING | 3 дня |
| 3 | JOIN: INNER, LEFT, дубликаты при соединении | 4 дня |
| 4 | Подзапросы и CTE (WITH) | 3 дня |
| 5 | Оконные функции: ROW_NUMBER, SUM OVER, LAG | 5 дней |
| 6 | Даты, строки, CASE, приведение типов | 3 дня |
| 7 | Производительность: индексы, план запроса | 3 дня |
Итого около трёх недель по часу в день — и вы закрываете 90% рабочих задач.
Три задачи, которые спрашивают почти всегда
1. Топ-3 товара по выручке в каждой категории
WITH ranked AS (
SELECT category, product, SUM(amount) AS revenue,
ROW_NUMBER() OVER (PARTITION BY category ORDER BY SUM(amount) DESC) AS rn
FROM sales
GROUP BY category, product
)
SELECT category, product, revenue FROM ranked WHERE rn <= 3;
2. Пользователи, которые не сделали ни одного заказа
SELECT u.id, u.email
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE o.id IS NULL;
3. Конверсия по месяцам
SELECT date_trunc('month', created_at) AS m,
COUNT(*) FILTER (WHERE status = 'paid')::numeric / COUNT(*) AS cr
FROM orders
GROUP BY 1
ORDER BY 1;
Частые ошибки новичков
- Дубликаты после JOIN. Соединение по неуникальному ключу размножает строки — всегда проверяйте COUNT до и после.
- WHERE вместо HAVING. Фильтр по агрегату работает только в HAVING.
- NULL в сравнениях.
NULL <> 5не вернёт строки: используйте IS NULL / IS NOT NULL. - Деление целых чисел. Приводите к numeric, иначе конверсия окажется нулём.
- **SELECT *** в продовых запросах — лишняя нагрузка и хрупкость.
Где практиковаться
Лучший тренажёр — собственная база с реалистичными данными: сгенерируйте таблицы заказов, пользователей и товаров и решайте бизнес-вопросы. Так навык закрепляется быстрее, чем на абстрактных задачах.
Дальше: аналитик данных и системный аналитик.
FAQ
Какой диалект учить? PostgreSQL: он ближе всего к стандарту и чаще всего встречается в вакансиях.
Нужны ли оконные функции джуну? Да, это главный водораздел между «умею SELECT» и «умею аналитику».
Сколько времени занимает освоение базового SQL? При 1–2 часах в день база (SELECT, WHERE, JOIN, GROUP BY, подзапросы) укладывается в 3–4 недели. Ещё месяц уходит на оконные функции и оптимизацию запросов.
Как тренироваться без доступа к рабочей базе? Разверните локально PostgreSQL или SQLite с открытым датасетом и решайте задачи на тренажёрах. Важно писать запросы под конкретный вопрос бизнеса, а не только по шаблону упражнения.
Что спрашивают по SQL на собеседовании джуна? Джойны и их различия, группировки с фильтрацией по агрегату, оконные функции для рангов и накопительных сумм, устранение дублей. Часто дают короткую практическую задачу в редакторе.
Поделиться статьёй
Похожие статьи

Системный аналитик в Яндекс Практикуме: обзор курса
Разбор курса системного аналитика в Яндекс Практикуме: программа, инструменты, проекты, отличие от бизнес-аналитики и критерии выбора.

Инженер по тестированию в Яндекс Практикуме: обзор
Что входит в курс инженера по тестированию Яндекс Практикума, какие навыки и проекты проверять и как понять, подходит ли вам QA.

Data Science в Яндекс Практикуме: обзор курса
Разбираем курс Data Science Яндекс Практикума: математика, Python, машинное обучение, проекты, нагрузка и критерии выбора программы.