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

212. Кэшбэк с округлением вниз по каждой покупке

Средняя

В purchases — покупки по карте. Кэшбэк начисляется с каждой покупки отдельно: 5 % для mcc_group = АЗС, 1,5 % для остальных. Копейки отбрасываются у каждой покупки: с 99 ₽ кэшбэк 1,485 ₽ превращается в 1 ₽.

Посчитайте кэшбэк каждого клиента за сентябрь 2026 года (по op_at). Верните client_id, cashback_rub — целое число рублей. Клиент с покупками, но без кэшбэка, выводится с нулём. Порядок — по client_id.

В работе: Сверка начислений перед выплатой: расхождение в рубль на клиента — это миллионы на всю базу.

Таблицы

purchases — одна строка — одна покупка

КолонкаТипЧто значит
op_idintключ
client_idintклиент
op_attimestampвремя покупки
mcc_grouptextгруппа MCC: АЗС, Супермаркеты, Кафе…
amount_rubnumericсумма покупки

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

purchases · 5 строк

op_idclient_idop_atmcc_groupamount_rub
112026-09-03T08:40:00Супермаркеты1290
212026-09-03T19:10:00Кафе450
312026-09-05T12:00:00Аптеки99
422026-09-07T07:30:00АЗС2500
522026-09-07T07:35:00Кафе230

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

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

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