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

41. Кэшбэк по карте с месячным лимитом

Лёгкая

В card_tx — покупки по карте Ozon Банка, в cashback_rates — ставка кэшбэка категории в целых процентах (pct = 5 значит 5 %). Покупки в категориях без ставки кэшбэк не дают.

Кэшбэк клиента за месяц — сумма по всем его покупкам месяца amount_rub * pct / 100, округлённая вниз до рубля, но не больше 3000 ₽.

Верните кэшбэк за октябрь 2025 года: client_id, cashback_rub, только для клиентов, у которых были покупки в категориях со ставкой. Порядок — по client_id.

В работе: Начисление кэшбэка в конце месяца и проверка, сколько клиентов упираются в лимит.

Таблицы

card_tx — покупки по карте

КолонкаТипЧто значит
tx_idintключ
client_idintклиент
tx_attimestampвремя
amount_rubnumericсумма
categorytextкатегория покупки

cashback_rates — ставки категорий

КолонкаТипЧто значит
categorytextключ
pctintпроцент кэшбэка

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

card_tx · 5 строк

tx_idclient_idtx_atamount_rubcategory
112025-10-03T10:00:004280,5Супермаркеты
212025-10-05T19:20:00650Такси
312025-10-06T09:00:0015000Электроника
422025-10-10T12:00:001290Аптеки
532025-10-11T12:00:008000Электроника

cashback_rates · 3 строки

categorypct
Супермаркеты5
Аптеки3
Такси10

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

client_idcashback_rub
1279
238
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
client_id, cashback_rub
JOINGROUP BYдаты

Источник: на данных Ozon Банка: операции по карте и кэшбэк. Условие пересказано своими словами.

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