🏠 Практика: 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(где требуется).