Войти Регистрация
Data base

100. Выручка корневых категорий Маркета

Сложная

В categories — дерево категорий каталога: у корня parent_id пустой, глубина бывает разной — от двух до пяти уровней. В order_items — проданные позиции, товар привязан к любой категории, не обязательно к листу.

Для каждой корневой категории посчитайте выручку по ней и всем вложенным категориям: root, revenue_rub = сумма price_rub * qty.

Корни без продаж — с нулём. Порядок: по revenue_rub от большей, при равенстве по root.

В работе: Квартальный отчёт категорийных менеджеров: вклад каждого крупного раздела.

Таблицы

categories — дерево категорий

КолонкаТипЧто значит
category_idintключ
parent_idintродитель, NULL у корня
nametextназвание

order_items — проданные позиции

КолонкаТипЧто значит
item_idintключ
category_idintкатегория товара
price_rubnumericцена за штуку, ₽
qtyintколичество

Пример: данные

categories · 6 строк

category_idparent_idname
1NULLЭлектроника
21Смартфоны
32Чехлы
4NULLДача и сад
54Инструменты
6NULLКниги

order_items · 4 строки

item_idcategory_idprice_rubqty
12249901
235903
3543002
443504

Ожидаемый ответ

rootrevenue_rub
Электроника26760
Дача и сад10000
Книги0
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 5 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
root, revenue_rub
рекурсивный CTELEFT JOINGROUP BY

Источник: на данных Маркета: дерево категорий и продажи. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.