17:22
Создание сложных запросов: Практические задачи на составление сложных SQL-запросов.

Курс по SQL

Урок 47: Создание сложных запросов: Практические задачи на составление сложных SQL-запросов

В этом уроке мы рассмотрим несколько практических задач, которые помогут вам научиться составлять сложные SQL-запросы. Эти задачи включают в себя использование подзапросов, объединений, агрегатных функций и других продвинутых возможностей SQL.

Задача 1: Найти самые продаваемые продукты

Найти самые продаваемые продукты по количеству продаж, упорядоченные по убыванию количества. Для этого используйте таблицы "orders" (заказы) и "order_items" (позиции заказов).

Запрос

SELECT product_id, SUM(quantity) AS total_quantity
FROM order_items
GROUP BY product_id
ORDER BY total_quantity DESC;

Результат выполнения

product_id total_quantity
1 150
2 120
3 90

Задача 2: Найти клиентов с наибольшим количеством заказов

Найти клиентов, которые сделали наибольшее количество заказов. Используйте таблицы "customers" (клиенты) и "orders" (заказы).

Запрос

SELECT c.customer_id, c.customer_name, COUNT(o.order_id) AS order_count
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
GROUP BY c.customer_id, c.customer_name
ORDER BY order_count DESC;

Результат выполнения

customer_id customer_name order_count
1 John Doe 10
2 Jane Smith 8
3 Alice Johnson 5

Задача 3: Найти средний размер заказа для каждого клиента

Найти средний размер заказа для каждого клиента. Используйте таблицы "customers" (клиенты) и "orders" (заказы).

Запрос

SELECT c.customer_id, c.customer_name, AVG(o.order_total) AS average_order
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
GROUP BY c.customer_id, c.customer_name;

Результат выполнения

customer_id customer_name average_order
1 John Doe 250.00
2 Jane Smith 180.50
3 Alice Johnson 300.75

Задача 4: Найти клиентов, которые не делали заказы

Найти клиентов, которые не делали ни одного заказа. Используйте таблицы "customers" (клиенты) и "orders" (заказы).

Запрос

SELECT c.customer_id, c.customer_name
FROM customers c
LEFT JOIN orders o ON c.customer_id = o.customer_id
WHERE o.order_id IS NULL;

Результат выполнения

customer_id customer_name
4 Bob Brown
5 Emily White

Упражнения

Упражнение 1: Найти самые дорогие заказы

Напишите запрос для поиска самых дорогих заказов, упорядоченных по убыванию суммы заказа. Используйте таблицы "orders" (заказы) и "order_items" (позиции заказов).

Решение:

SELECT o.order_id, SUM(oi.quantity * oi.price) AS total_price
FROM orders o
JOIN order_items oi ON o.order_id = oi.order_id
GROUP BY o.order_id
ORDER BY total_price DESC;

Объяснение: Мы объединяем таблицы "orders" и "order_items", группируем по "order_id" и вычисляем общую стоимость заказа.

Упражнение 2: Найти продукты, которые не были проданы

Напишите запрос для поиска продуктов, которые не были проданы ни разу. Используйте таблицы "products" (продукты) и "order_items" (позиции заказов).

Решение:

SELECT p.product_id, p.product_name
FROM products p
LEFT JOIN order_items oi ON p.product_id = oi.product_id
WHERE oi.product_id IS NULL;

Объяснение: Мы используем левое соединение между таблицами "products" и "order_items" и выбираем те продукты, которые не имеют соответствующих записей в "order_items".

Упражнение 3: Найти общий доход от продаж по категориям

Напишите запрос для вычисления общего дохода от продаж по каждой категории продуктов. Используйте таблицы "products" (продукты), "categories" (категории) и "order_items" (позиции заказов).

Решение:

SELECT c.category_name, SUM(oi.quantity * oi.price) AS total_revenue
FROM categories c
JOIN products p ON c.category_id = p.category_id
JOIN order_items oi ON p.product_id = oi.product_id
GROUP BY c.category_name
ORDER BY total_revenue DESC;

Объяснение: Мы объединяем таблицы "categories", "products" и "order_items", группируем по "category_name" и вычисляем общий доход от продаж для каждой категории.

Упражнение 4: Найти среднее количество продуктов в заказах

Напишите запрос для вычисления среднего количества продуктов в заказах. Используйте таблицы "orders" (заказы) и "order_items" (позиции заказов).

Решение:

SELECT AVG(order_item_count) AS average_items
FROM (
 SELECT COUNT(*) AS order_item_count
 FROM order_items
 GROUP BY order_id
) AS subquery;

Объяснение: Мы используем подзапрос для подсчета количества позиций в каждом заказе, а затем вычисляем среднее количество продуктов в заказах.

Категория: SQL | Просмотров: 103 | Добавил: Admin | Рейтинг: 1.0/1
Всего комментариев: 0
Имя *:
Email *:
Код *: