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

69. Кэшбэк по категориям MCC с лимитом 3000 ₽

Средняя

В card_tx — операции по картам: покупки с положительной суммой и возвраты покупок с отрицательной. В cashback_rules — процент кэшбэка для MCC-кодов, у которых он есть.

Кэшбэк начисляется за каждую покупку отдельно: сумма × процент / 100, округлённая вниз до рубля. За возвраты и MCC без правила кэшбэк — 0. За месяц клиент получает не больше 3000 ₽.

Для каждого клиента, у которого были операции в марте 2026, верните client_id и cashback_rub. Порядок по client_id.

В работе: Начисление кэшбэка в конце месяца: проверка расчёта перед выплатой.

Таблицы

card_tx — операции по картам

КолонкаТипЧто значит
tx_idintключ
client_idintклиент
tx_attimestampвремя
mccintкод категории продавца
amount_rubnumericсумма, ₽; возврат — с минусом

cashback_rules — правила кэшбэка

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

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

card_tx · 7 строк

tx_idclient_idtx_atmccamount_rub
112026-03-03T19:10:0054112349,9
212026-03-08T20:30:0058121870
312026-03-09T11:00:0060115000
422026-03-10T13:00:0058121870
522026-03-12T13:00:005812-1870
632026-03-15T09:00:0060113000
732026-02-28T21:00:0055414000

cashback_rules · 3 строки

mcccategorypct
5411Супермаркеты1
5812Рестораны5
5541АЗС3

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

client_idcashback_rub
1116
293
30
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 5 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
client_id, cashback_rub
LEFT JOINусловная агрегацияNULL

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

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