← К оглавлению занятия

🏠 Домашнее задание

📁 Блок: SQL / MySQL / Оконные функции ⏱️ Время изучения: ~90 мин 🎯 Сложность: Продвинутая

⚡ Кратко: домашнее задание

  1. Топ-10 продуктов по себестоимости через DENSE_RANK.
  2. Нумерация продуктов по алфавиту через ROW_NUMBER.
  3. Разделение продуктов на 4 группы по цене через NTILE(4).

🏠 Практическая работа из LMS

1

Условия

Для выполнения домашнего задания используется база данных с доступом на чтение:

  • hostname: ich-db.edu.itcareerhub.de
  • username: ich1
  • password: password

Рабочая таблица: products.

  1. Присвоить ранг продукту без пропусков значений в ранге от большей себестоимости к меньшей. Вывести топ-10 продуктов product_name.
  2. Пронумеровать строки в таблице в зависимости от названия товара от A до Z.
  3. Разделить все продукты на 4 равных группы в зависимости от list_price. Вывести имя продукта, list_price и номер группы.

🛠️ Подготовка окружения

  1. Откройте DBeaver или MySQL Workbench.
  2. Создайте подключение к учебной базе: хост ich-db.edu.itcareerhub.de, пользователь ich1, пароль password.
  3. Откройте новый SQL-редактор и выберите схему с таблицей products.
  4. База доступна только на чтение — используйте SELECT-запросы.

📝 Пошаговое решение

1

Задача 1. Топ-10 продуктов по себестоимости

«Без пропусков» означает DENSE_RANK. Так как нужно вывести именно топ-10 продуктов, после ранжирования сортируем строки по себестоимости и ограничиваем выдачу через LIMIT 10.

SELECT
    product_name,
    DENSE_RANK() OVER (ORDER BY standard_cost DESC) AS cost_rank
FROM products
ORDER BY standard_cost DESC, product_name
LIMIT 10;
2

Задача 2. Нумерация по алфавиту

ROW_NUMBER() присваивает уникальный номер каждой строке в порядке сортировки по названию.

SELECT
    product_name,
    ROW_NUMBER() OVER (ORDER BY product_name) AS row_num
FROM products;
3

Задача 3. Четыре группы по цене

NTILE(4) распределяет строки по четырём группам в порядке возрастания list_price.

SELECT
    product_name,
    list_price,
    NTILE(4) OVER (ORDER BY list_price) AS price_group
FROM products;

✅ Проверка

  1. Выполните каждый запрос в DBeaver и убедитесь, что он не возвращает ошибок синтаксиса.
  2. Для задачи 1 проверьте, что ранги идут без пропусков: 1, 2, 3 и т.д.
  3. Для задачи 2 убедитесь, что нумерация начинается с 1 и идёт строго по алфавиту.
  4. Для задачи 3 проверьте, что номера групп находятся в диапазоне от 1 до 4.