SQLJOINEasyБесплатно

Топ-5 категорий по количеству заказов

// Условие

Для каждой категории товаров посчитайте количество уникальных завершённых заказов, в которых есть хотя бы один товар этой категории. Выведите category и order_count. Топ-5 по убыванию.

// Таблицы

sandbox.orders
order_idINT
user_idINT
order_dateTIMESTAMP
amountNUMERIC(10,2)
statusVARCHAR(20)
delivery_daysINT
promo_codeVARCHAR(20)
sandbox.order_items
item_idINT
order_idINT
product_idINT
quantityINT
unit_priceNUMERIC(10,2)
sandbox.products
product_idINT
product_nameVARCHAR(100)
categoryVARCHAR(30)
priceNUMERIC(10,2)
seller_idINT

// Что тренирует

JOINCOUNT DISTINCTGROUP BYLIMIT
▶ Решить в SQL-песочнице

// Решение

Подсказка

Нужна цепочка JOIN: orders → order_items → products. COUNT(DISTINCT order_id) — один заказ может содержать несколько товаров одной категории.

Сначала попробуй сам → Показать решение
SELECT
  p.category,
  COUNT(DISTINCT o.order_id) AS order_count
FROM sandbox.orders o
JOIN sandbox.order_items oi ON o.order_id = oi.order_id
JOIN sandbox.products p ON oi.product_id = p.product_id
WHERE o.status = 'completed'
GROUP BY p.category
ORDER BY order_count DESC
LIMIT 5;

Цепочка из трёх JOIN — частый паттерн в e-commerce. Ключевой момент: COUNT(DISTINCT o.order_id). Без DISTINCT один заказ с 3 товарами категории electronics будет посчитан 3 раза. На собеседовании за это снимают баллы.

// Похожие задачи

// Разобраться в теме

→ Типы JOIN в SQL