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

79. Личный процент выкупа по последним 75 заказам

Средняя

Личный процент выкупа покупателя считают по 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_idintключ
buyer_idintпокупатель
ordered_attimestampвремя заказа
price_rubnumericстоимость
outcometextbought / refused / return_defect / return_other

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

buyer_orders · 6 строк

order_idbuyer_idordered_atprice_ruboutcome
112026-05-01T10:00:002000bought
212026-05-03T10:00:001500refused
312026-05-05T10:00:003000return_defect
412026-05-07T10:00:00500bought
522026-06-01T12:00:00999refused
632026-06-02T12:00:001200return_defect

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

buyer_idorders_countedbuyout_pct
1362,5
210
30NULL
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
buyer_id, orders_counted, buyout_pct
оконные функциитоп-N в группеусловная агрегацияNULL

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

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