Занятие 28. Summary session 7
⚡ Кратко: домашнее задание
- Продукты и количество заказанных единиц — подзапрос и CTE.
- Заказы после первого заказа клиента Lee.
- Продукты с максимальным target_level.
🏠 Домашнее задание
Все задания выполняются в базе northwind. Это домашнее задание занятия 26 с разбором решений.
Задание 1. Продукты и количество заказанных единиц
Выведите названия продуктов из таблицы products, включая количество заказанных единиц quantity для каждого продукта из таблицы order_details. Решите задачу с помощью подзапроса и CTE.
Решение через подзапрос
USE northwind;
SELECT p.product_name, a.total_quantity
FROM products AS p
LEFT JOIN (
SELECT product_id, SUM(quantity) AS total_quantity
FROM order_details
GROUP BY product_id
) AS a ON p.id = a.product_id;
Решение через CTE
USE northwind;
WITH a AS (
SELECT product_id, SUM(quantity) AS total_quantity
FROM order_details
GROUP BY product_id
)
SELECT p.product_name, a.total_quantity
FROM products AS p
LEFT JOIN a ON p.id = a.product_id;
Задание 2. Заказы после первого заказа клиента Lee
Найдите все заказы из таблицы orders, сделанные после даты самого первого заказа клиента Lee из таблицы customers.
Решение через подзапрос
USE northwind;
SELECT *
FROM orders
WHERE order_date > (
SELECT MIN(order_date)
FROM orders
JOIN customers ON orders.customer_id = customers.id
WHERE customers.last_name = 'Lee'
GROUP BY customers.last_name
);
Решение через CTE
USE northwind;
WITH min_date AS (
SELECT MIN(order_date) AS min_date
FROM orders
JOIN customers ON orders.customer_id = customers.id
WHERE customers.last_name = 'Lee'
GROUP BY customers.last_name
)
SELECT *
FROM orders
WHERE order_date > (SELECT min_date FROM min_date);
Задание 3. Продукты с максимальным target_level
Найдите все продукты из таблицы products, у которых target_level равен максимальному значению target_level в таблице.
Решение через подзапрос
USE northwind;
SELECT *
FROM products
WHERE target_level = (
SELECT MAX(target_level) FROM products
);
Решение через CTE
USE northwind;
WITH max_level AS (
SELECT MAX(target_level) AS ml FROM products
)
SELECT *
FROM products
WHERE target_level = (SELECT ml FROM max_level);
Проверить по документации: точные имена столбцов в схеме northwind могут отличаться. Адаптируйте запросы под реальные названия таблиц и полей.