Позиция заказа (order_items) — товар продавца в нескольких штуках. Покупатель может вернуть часть штук, и не за один раз: каждый возврат — строка в returns с количеством qty.
Для каждого продавца верните seller_id, gross_rub — сумму qty * price_rub по позициям, returned_rub — стоимость возвращённых штук по цене позиции и net_rub — разницу. Порядок — по net_rub по убыванию, затем по seller_id.
В работе: Выплата продавцу: деньги за возвращённые штуки удерживаются из выручки.
Таблицы
order_items — позиции заказов
| Колонка | Тип | Что значит |
|---|---|---|
item_id | int | ключ |
order_id | int | заказ |
seller_id | int | продавец |
sku | int | товар |
qty | int | штук |
price_rub | numeric | цена за штуку |
returns — возвраты, по позиции может быть несколько
| Колонка | Тип | Что значит |
|---|---|---|
return_id | int | ключ |
item_id | int | позиция |
qty | int | возвращено штук |
returned_at | timestamp | время |
Пример: данные
order_items · 4 строки
| item_id | order_id | seller_id | sku | qty | price_rub |
|---|---|---|---|---|---|
| 1 | 1001 | 7 | 501 | 3 | 890 |
| 2 | 1001 | 8 | 601 | 1 | 4500 |
| 3 | 1002 | 7 | 502 | 2 | 1200 |
| 4 | 1003 | 8 | 602 | 4 | 350 |
returns · 2 строки
| return_id | item_id | qty | returned_at |
|---|---|---|---|
| 1 | 1 | 1 | 2025-11-10T12:00:00 |
| 2 | 4 | 4 | 2025-11-12T15:00:00 |
Ожидаемый ответ
| seller_id | gross_rub | returned_rub | net_rub |
|---|---|---|---|
| 8 | 5900 | 1400 | 4500 |
| 7 | 5070 | 890 | 4180 |
SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
seller_id, gross_rub, returned_rub, net_rub
Источник: на данных Ozon: заказы и возвраты. Условие пересказано своими словами.
Посмотреть данные, проверить кусок запроса. На зачёт не влияет.
Здесь появится результат отправки.