Skip to content

Latest commit

 

History

121 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

SQL Practice Tasks

Учебные задачи по 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.

Примечания

  • Задачи взяты из открытых источников и адаптированы под учебные цели.
  • Некоторые решения намеренно усложнены, чтобы прокачать работу с подзапросами.
  • Все задачи разобраны в отдельных файлах с подробным описанием логики и используемых методов.
  • Репозиторий будет пополняться по мере прохождения новых тем.

About

Everything I'm learning about SQL in one place: schemas, queries, case studies, and notes. From simple selects to complex analytical queries.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors