Личный процент выкупа покупателя считают по 75 последним заказам (по ordered_at, при равном времени — по большему order_id), по стоимости: сумма выкупленного делится на сумму заказанного.
Возвраты из-за брака (return_defect) не вина покупателя: такие заказы входят в 75 последних, но не учитываются ни в числителе, ни в знаменателе. Обычный возврат return_other и отказ refused — это невыкуп.
Верните buyer_id, orders_counted (заказов в расчёте без брака) и buyout_pct с 1 знаком. Если учитывать нечего, buyout_pct — NULL; если всё отказано — 0. Порядок — по buyer_id.
В работе: Личный процент выкупа влияет на условия для покупателя, поэтому его формулу проверяют на каждом краевом случае.
Таблицы
buyer_orders — завершённые заказы
| Колонка | Тип | Что значит |
|---|---|---|
order_id | int | ключ |
buyer_id | int | покупатель |
ordered_at | timestamp | время заказа |
price_rub | numeric | стоимость |
outcome | text | bought / refused / return_defect / return_other |
Пример: данные
buyer_orders · 6 строк
| order_id | buyer_id | ordered_at | price_rub | outcome |
|---|---|---|---|---|
| 1 | 1 | 2026-05-01T10:00:00 | 2000 | bought |
| 2 | 1 | 2026-05-03T10:00:00 | 1500 | refused |
| 3 | 1 | 2026-05-05T10:00:00 | 3000 | return_defect |
| 4 | 1 | 2026-05-07T10:00:00 | 500 | bought |
| 5 | 2 | 2026-06-01T12:00:00 | 999 | refused |
| 6 | 3 | 2026-06-02T12:00:00 | 1200 | return_defect |
Ожидаемый ответ
| buyer_id | orders_counted | buyout_pct |
|---|---|---|
| 1 | 3 | 62,5 |
| 2 | 1 | 0 |
| 3 | 0 | NULL |
SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
buyer_id, orders_counted, buyout_pct
Источник: на данных Wildberries: выкупы и возвраты покупателей. Условие пересказано своими словами.
Посмотреть данные, проверить кусок запроса. На зачёт не влияет.
Здесь появится результат отправки.