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

Занятие 25. Подзапросы

📁 Блок: SQL / MySQL / Подзапросы и CTE ⏱️ Время изучения: ~90 мин 🎯 Сложность: Средняя
#in #where #select #from

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

  • Клиенты, сделавшие более 5 заказов.
  • Продукты, ни разу не заказанные.
  • Средняя выручка по категориям продуктов.

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

Все задания выполняются в базе northwind.

Задание 1. Клиенты с большим количеством заказов

Выведите имена и фамилии клиентов, которые сделали более 5 заказов.

USE northwind;

SELECT first_name, last_name
FROM customers
WHERE id IN (
    SELECT customer_id
    FROM orders
    GROUP BY customer_id
    HAVING COUNT(*) > 5
);

Задание 2. Продукты без заказов

Найдите продукты, которые ни разу не попадали в order_details.

USE northwind;

SELECT id, product_name
FROM products
WHERE id NOT IN (
    SELECT DISTINCT product_id FROM order_details
);

Примечание: альтернатива — LEFT JOIN ... IS NULL или NOT EXISTS. В продакшене NOT EXISTS часто предпочтительнее из-за обработки NULL.

Задание 3. Средняя выручка по категориям

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

USE northwind;

SELECT c.category_name, AVG(od.revenue) AS avg_revenue
FROM (
    SELECT product_id, unit_price * quantity AS revenue
    FROM order_details
) AS od
JOIN products AS p ON od.product_id = p.id
JOIN categories AS c ON p.category_id = c.id
GROUP BY c.category_name;
Проверить по документации: точные имена таблиц и столбцов в схеме northwind могут отличаться. Адаптируйте запрос под реальные названия.