Учебные задачи по SQL, решённые в рамках самостоятельной подготовки.
Репозиторий создан для отработки навыков написания сложных запросов, декомпозиции задач и работы с разными диалектами SQL.
- Прокачать уверенное владение SQL на уровне, достаточном для позиции Junior+/Middle Data Engineer.
- Научиться разбивать сложные бизнес-задачи на читаемые этапы с помощью CTE.
- Освоить работу с подзапросами, агрегациями и оконными функциями.
- Попрактиковаться в написании самодокументируемого SQL-кода.
- Подготовиться к реальным задачам на собеседованиях и в работе с данными.
- CTE (
WITH) — пошаговое разбиение задачи на логические блоки. MATERIALIZED— управление материализацией CTE.- Вложенные подзапросы в
SELECTиFROM. - Переход от одноразовых CTE к прямым подзапросам.
- Проектирование переиспользуемых CTE.
EXISTS/NOT EXISTS— проверка наличия строк в подзапросе.IN/NOT IN— сравнение со списком значений.ANY/<> ALL— работа с массивами и подзапросами.- Агрегация с
FILTER— подсчёт по условию безCASE. HAVING— фильтрация после группировки.
UNNEST— разворачивание массивов в строки.ANY— проверка вхождения элементов массива в список.- Комбинация
UNNEST+JOINдля связи товаров и заказов.
DATE_TRUNC— округление дат до нужной точности.AGE— вычисление возраста или разницы между датами.EXTRACT/DATE_PART— извлечение компонентов даты.TO_CHAR/TO_TIMESTAMP— форматирование и преобразование типов.INTERVAL— арифметика с датами.
SUM,AVG,MIN,MAX,COUNT.LAG,LEAD,ROW_NUMBER,RANK,DENSE_RANK.- Оконные рамки
ROWS BETWEEN. WINDOW— переиспользование оконного определения.ROUND+ приведение кDECIMALдля корректных дробей.- Расчёт метрик на уровне заказа, пользователя и дня.
- Разделение расчёта цены заказа и пользовательской статистики.
- Вынос
LIMITиORDER BYв финальный запрос. - Использование
JOINдля связи таблиц вместо подзапросов. - Сравнение производительности версий с
UNNESTиANY. - Использование
CROSS JOINдля подстановки одиночных значений. - Защита от деления на ноль через
NULLIF. - Осознанный выбор между
NOT EXISTSиLEFT JOIN ... IS NULL.
- Задачи взяты из открытых источников и адаптированы под учебные цели.
- Некоторые решения намеренно усложнены, чтобы прокачать работу с подзапросами.
- Все задачи разобраны в отдельных файлах с подробным описанием логики и используемых методов.
- Репозиторий будет пополняться по мере прохождения новых тем.