В categories — дерево категорий каталога: у корня parent_id пустой, глубина бывает разной — от двух до пяти уровней. В order_items — проданные позиции, товар привязан к любой категории, не обязательно к листу.
Для каждой корневой категории посчитайте выручку по ней и всем вложенным категориям: root, revenue_rub = сумма price_rub * qty.
Корни без продаж — с нулём. Порядок: по revenue_rub от большей, при равенстве по root.
В работе: Квартальный отчёт категорийных менеджеров: вклад каждого крупного раздела.
Таблицы
categories — дерево категорий
| Колонка | Тип | Что значит |
|---|---|---|
category_id | int | ключ |
parent_id | int | родитель, NULL у корня |
name | text | название |
order_items — проданные позиции
| Колонка | Тип | Что значит |
|---|---|---|
item_id | int | ключ |
category_id | int | категория товара |
price_rub | numeric | цена за штуку, ₽ |
qty | int | количество |
Пример: данные
categories · 6 строк
| category_id | parent_id | name |
|---|---|---|
| 1 | NULL | Электроника |
| 2 | 1 | Смартфоны |
| 3 | 2 | Чехлы |
| 4 | NULL | Дача и сад |
| 5 | 4 | Инструменты |
| 6 | NULL | Книги |
order_items · 4 строки
| item_id | category_id | price_rub | qty |
|---|---|---|---|
| 1 | 2 | 24990 | 1 |
| 2 | 3 | 590 | 3 |
| 3 | 5 | 4300 | 2 |
| 4 | 4 | 350 | 4 |
Ожидаемый ответ
| root | revenue_rub |
|---|---|
| Электроника | 26760 |
| Дача и сад | 10000 |
| Книги | 0 |
SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
root, revenue_rub
Источник: на данных Маркета: дерево категорий и продажи. Условие пересказано своими словами.
Посмотреть данные, проверить кусок запроса. На зачёт не влияет.
Здесь появится результат отправки.