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

🏠 Практика: HAVING

⚡ Кратко

7 дополнительных задач на агрегаты, группировку и фильтрацию групп через HAVING.

Проверить по документации: извлечённый HTML-источник LMS для этого занятия содержит страницу авторизации, а не текст задания. Ниже оставлена учебная практика по теме HAVING; перед выдачей студентам сверить с актуальным заданием в LMS.

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

Используйте базу данных занятий. Убедитесь, что доступны таблицы products, order_details, inventory_transactions или их аналоги.

SHOW TABLES;
DESCRIBE products;

Задача 1. Статистики по unit_cost

Посчитайте среднее, сумму, минимум и максимум столбца unit_cost.

SELECT AVG(unit_cost) AS avg_cost,
       SUM(unit_cost) AS total_cost,
       MIN(unit_cost) AS min_cost,
       MAX(unit_cost) AS max_cost
FROM order_details;

Задача 2. Уникальные заказы

Посчитайте количество уникальных purchase_order_id.

SELECT COUNT(DISTINCT purchase_order_id) AS unique_orders
FROM inventory_transactions;

Задача 3. Продукты в каждом заказе

Посчитайте количество продуктов в каждом заказе и отсортируйте по убыванию.

SELECT purchase_order_id, COUNT(product_id) AS product_count
FROM inventory_transactions
GROUP BY purchase_order_id
ORDER BY product_count DESC;

Задача 4. Заказы по дате доставки

Посчитайте заказы по дате доставки, учитывая только строки с quantity > 30.

SELECT date_received, COUNT(*) AS order_count
FROM inventory_transactions
WHERE quantity > 30
GROUP BY date_received
ORDER BY date_received;

Задача 5. Суммарная стоимость по датам

Стоимость заказа — произведение quantity на unit_cost.

SELECT date_received, SUM(quantity * unit_cost) AS total_cost
FROM inventory_transactions
GROUP BY date_received
ORDER BY date_received;

Задача 6. Среднее и максимальное quantity

Сгруппируйте по unit_cost, оставив строки с purchase_order_id <= 100.

SELECT unit_cost,
       AVG(quantity) AS avg_quantity,
       MAX(quantity) AS max_quantity
FROM inventory_transactions
WHERE purchase_order_id <= 100
GROUP BY unit_cost
ORDER BY unit_cost;

Задача 7. Категоризация по unit_cost

Для строк с непустым inventory_id создайте категорию и посчитайте количество продуктов.

SELECT CASE
         WHEN unit_cost > 20 THEN 'Expensive'
         ELSE 'Others'
       END AS category,
       COUNT(*) AS product_count
FROM inventory_transactions
WHERE inventory_id IS NOT NULL
GROUP BY category
ORDER BY product_count DESC;

Проверка

  • Все запросы выполняются без ошибок.
  • Для фильтрации строк используется WHERE.
  • Для фильтрации групп используется HAVING (где требуется).