Основы SQL
Для старта с WHERE, GROUP BY, сортировки и первых соединений перед задачами Junior.
Практическая линейка с автопроверкой на Stepik: стартуйте с Junior, доберите Middle или закройте всё Pro pack 3 in 1.
with user_revenue as (
select
u.user_id,
u.segment,
sum(p.amount) as revenue,
row_number() over (
partition by u.segment
order by sum(p.amount) desc
) as rn
from users u
join payments p
on p.user_id = u.user_id
where p.status = 'paid'
group by u.user_id, u.segment
)
select segment, user_id, revenue
from user_revenue
where rn = 1; Слабый выбор курса легко ломает темп: Junior может быть скучным, Middle без базы быстро превращается в боль. Начните с честного состояния, в котором SQL проседает прямо сейчас.
Прямые ссылки на Stepik ниже, в карточках конкретных курсов. Здесь выбираем маршрут, а не покупаем наугад.
Сначала выберите точку входа. Основы закрывают базу перед Junior. SQL-квест дает короткий игровой формат ближе к Middle. Бандлы подходят для полного маршрута.
Для старта с WHERE, GROUP BY, сортировки и первых соединений перед задачами Junior.
Короткий игровой курс с задачами ближе к Middle: решить руками, втянуться в формат и понять следующий шаг.
JOIN, GROUP BY, NULL, даты и первые задачи, где ломается логика результата.
CTE, окна, ранжирование, tricky-условия и объяснение хода решения.
50 задач без демо-блока: меньше разогрева, больше плотных кейсов на окна, подзапросы, агрегации и крайние случаи.
Проверка уровня перед покупкой: понять текущую точку и выбрать курс без промаха.
Маршрут с базой Junior и рабочими задачами Middle в одной программе.
Junior, Middle и Upper-Middle одним маршрутом: база, рабочие запросы и плотная подготовка к сложным вопросам.
Для тех, кто уже понимает синтаксис SQL, но всё ещё ошибается в JOIN, GROUP BY, NULL, датах, дубликатах после соединений и простых бизнес-условиях.
Основной трек идёт от безопасного демо к задачам на бизнес-логику, ловушки и разогрев перед собеседованием. Диалект курса: MySQL 8.0+.
Основной трек Junior: от задач 1-5 в демо до финального теста 91-100.
Можно проверить формат до покупки: условия, схема, автопроверка и разбор.
45 тестов с собеседовательным уклоном и 10 SQL-задач повышенной плотности.
Если SQL уже не пугает, но решение часто держится на ощущениях: “кажется, надо соединить таблицы”, “вроде COUNT”, “почему строк стало больше”. Это как раз Junior-уровень, который надо довести до автоматизма.
Короткие фрагменты реальных задач: условие, навык и SQL-решение. Так проще понять уровень без красивой болтовни.
Нужно соединить пользователей и сделки, оставить Completed, посчитать сделки по городам и взять два лидера.
SELECT
u.city,
COUNT(*) AS total_orders
FROM trades t
JOIN users u ON t.user_id = u.user_id
WHERE t.status = 'Completed'
GROUP BY u.city
ORDER BY total_orders DESC, u.city
LIMIT 2; Классика на LEFT JOIN: найти клиентов, у которых нет ни одного заказа, и не сломать смысл фильтром.
SELECT c.name
FROM customers c
LEFT JOIN orders o
ON c.customer_id = o.customer_id
WHERE o.order_id IS NULL
AND c.name IS NOT NULL
ORDER BY c.name; Нужно выбрать приглашённых пользователей, которые сделали хотя бы один заказ, и убрать повторы из-за нескольких покупок.
SELECT DISTINCT
u.name AS referred_user
FROM users u
JOIN orders o ON u.user_id = o.user_id
WHERE u.referrer_id IS NOT NULL
ORDER BY referred_user; Основы нужны, если ещё путаются фильтрация, группировки и первые соединения. SQL-квест — короткий игровой курс для тех, кто уже может решать руками и хочет формат ближе к Middle.
Для тех, кто ещё путает порядок операторов, фильтрацию, группировку и первые соединения. Подготовка к Junior через спокойную базовую практику.
SELECT name, registration_date
FROM users
WHERE registration_date > '2023-01-01'
ORDER BY registration_date DESC; Короткий игровой курс с задачами ближе к Middle. Подходит, чтобы втянуться, увидеть формат и проверить ход мысли на компактной дистанции.
Квиз ниже на странице.
Для тех, кто уже пишет рабочий SQL, но теряет уверенность на CTE, оконных функциях, ранжировании, подзапросах и задачах, где важна не только выдача, но и ход мысли.
Здесь уже мало знать синтаксис. Нужно держать зерно результата, аккуратно собирать промежуточные CTE, использовать окна и спокойно объяснять, почему запрос устроен именно так.
Можно проверить формат и уровень до покупки курса.
Разбиваете решение на понятные шаги и спокойно проверяете каждый слой.
RANK, PARTITION BY, средние значения и сравнения внутри групп.
Если JOIN, GROUP BY и базовые агрегаты уже живут в руках, но задачи с окнами, несколькими шагами и tricky-условиями заставляют долго перебирать варианты, это Middle.
Три фрагмента показывают реальную плотность Middle: self join, ранжирование и сравнение со средним через окно.
Посчитать, сколько прямых приглашённых у каждого участника сделали хотя бы одну покупку.
SELECT
r.name AS referrer_name,
COUNT(DISTINCT u.user_id) AS referral_purchasers
FROM users u
JOIN users r ON u.referrer_id = r.user_id
JOIN orders o ON u.user_id = o.user_id
GROUP BY r.name
ORDER BY referral_purchasers DESC, referrer_name; Построить рейтинг магазинов внутри каждого региона по выручке за 2024 год.
SELECT
s.region,
s.store_name,
SUM(sa.amount) AS total_sales,
RANK() OVER (
PARTITION BY s.region
ORDER BY SUM(sa.amount) DESC
) AS region_rank
FROM stores s
JOIN sales sa ON s.store_id = sa.store_id
WHERE YEAR(sa.sale_date) = 2024
GROUP BY s.region, s.store_name, s.store_id; Найти пользователей, чья активность по комментариям не меньше среднего по всем пользователям.
WITH user_activity AS (
SELECT
u.name,
COUNT(c.comment_id) AS comment_count,
AVG(COUNT(c.comment_id)) OVER () AS avg_comments
FROM users u
LEFT JOIN comments c ON u.user_id = c.user_id
GROUP BY u.user_id, u.name
)
SELECT name, comment_count
FROM user_activity
WHERE comment_count >= avg_comments; Для тех, кто уже не спотыкается о базовый SQL и хочет готовиться к сложным интервью: проверки данных, крайние случаи, EXISTS, окна, CTE и аккуратная логика результата.
Курс собран как плотный тренировочный блок: меньше вводных, больше задач, где легко ошибиться в зерне, фильтрах, дубликатах, NULL и граничных условиях.
Короткая дистанция без длинного разгона и повторения базы.
Сюда лучше идти после Junior и Middle-логики.
Сверки, разные заказы, отсутствующие строки, средние внутри групп.
Если Middle-задачи уже решаются без паники, но хочется нагрузить себя плотными кейсами перед интервью, Upper-Middle будет нормальной проверкой. Если база ещё плавает, сюда рано.
Здесь показываем задачи, где главная сложность в логике результата и edge cases.
Сверить сумму заказа с пересчитанной суммой позиций и поймать ошибки в данных.
SELECT
o.order_id,
o.total_amount,
ROUND(SUM(i.price * i.quantity), 2) AS calc_amount,
ROUND(ABS(SUM(i.price * i.quantity) - o.total_amount), 2) AS delta
FROM orders o
LEFT JOIN order_items i ON o.order_id = i.order_id
WHERE o.status = 'completed'
GROUP BY o.order_id, o.total_amount
HAVING ABS(SUM(i.price * i.quantity) - o.total_amount) > 0.01
OR SUM(i.price * i.quantity) IS NULL; Найти клиентов, которые купили два товара в разных заказах, без ложного совпадения в одном чеке.
SELECT DISTINCT o1.customer_id
FROM orders o1
JOIN order_items i1 ON o1.order_id = i1.order_id
WHERE i1.product_id = 'A'
AND EXISTS (
SELECT 1
FROM orders o2
JOIN order_items i2 ON o2.order_id = i2.order_id
WHERE o2.customer_id = o1.customer_id
AND i2.product_id = 'B'
AND o2.order_id <> o1.order_id
); Сравнить сотрудника со средней зарплатой внутри отдела и сохранить название отдела в результате.
WITH ranked_employees AS (
SELECT
e.name,
e.salary,
d.dept_name,
AVG(e.salary) OVER (PARTITION BY e.dept_id) AS avg_salary
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id
)
SELECT name, salary, dept_name
FROM ranked_employees
WHERE salary > avg_salary; В DE-практикуме SQL нужен не для галочки. Он всплывает в зерне результата, связях между слоями, проверках данных и BI-витринах. Если здесь есть провалы, проект быстро начинает буксовать.
Понимать, где одна строка результата, а где уже случайное размножение после JOIN.
Читать RAW, STG, CORE и MARTS не как названия, а как разные уровни ответственности.
Ловить NULL, дубликаты, пропуски дат, лишние строки и расхождения между источниками.
Собрать запрос так, чтобы его можно было открыть, объяснить и показать в дашборде.
with paid_orders as (
select
user_id,
date_trunc('month', paid_at) as pay_month,
amount
from core.orders
where status = 'paid'
),
monthly_revenue as (
select
user_id,
pay_month,
sum(amount) as revenue
from paid_orders
group by user_id, pay_month
)
select *
from monthly_revenue
where revenue > 0; Четыре коротких вопроса: текущий уровень, понимание фрагмента запроса и ближайшая цель. В конце получите курс или бандл, который логично брать сейчас.
Если база проседает, не надо покупать Middle. Если уже пишете рабочий SQL, не надо топтаться в Junior.
Коротко по выбору курса, демо-задачам, бандлам и переходу от SQL к Data Engineering.
Если путаются SELECT, WHERE, GROUP BY и порядок операторов, начните с основ. Если база уже есть, но ломается логика на JOIN, NULL и датах, берите Junior. Если пишете рабочий SQL, но проседают CTE, окна и объяснение решения, смотрите Middle.
Junior стабилизирует базу: соединения, группировки, NULL, даты, дубликаты и простые бизнес-условия. Middle уже про рабочие аналитические запросы: CTE, окна, ранжирование, подзапросы и задачи, где важно объяснить ход мысли.
Когда базовый SQL не мешает и хочется готовиться к сложным интервью. Там меньше разогрева и больше плотных задач: проверки данных, edge cases, EXISTS, окна и аккуратная логика результата.
Если до интервью мало времени, сначала пройдите диагностику. Если уровень уже понятен, Middle обычно закрывает основную массу собеседовательных SQL-задач. Upper-Middle нужен тем, кто хочет отработать сложные кейсы.
Бандл нужен, если цель не один узкий пробел, а маршрут. Junior + Middle подходит, когда база плавает и нужно выйти на рабочий уровень. Pro pack 3 in 1 нужен, если хотите закрыть всю SQL-линейку без пересборки покупки.
В Junior и Middle есть демо-задачи, которые можно попробовать на Stepik до покупки. В Upper-Middle формат плотнее: 50 задач без демо-блока, поэтому перед ним лучше честно проверить уровень.
Если цель Data Engineering, после уверенного SQL логично переходить к Python и DE-практикуму: файлы, DWH-слои, Spark, Airflow, Postgres и BI-витрина. SQL там нужен не для галочки, а для проверки зерна результата.
Если уровень понятен, открывайте программу на Stepik. Если есть сомнения или нужен комплект, диагностика покажет маршрут, точную цену и экономию.
Основы, Junior, Middle или Upper-Middle.
Junior + Middle или полная SQL-линейка.
Точная стоимость курса и реальная экономия комплекта.