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

202. Доля покупок с кэшбэком

Лёгкая

В card_ops лежат операции по картам: покупки (op_type = purchase) и переводы (transfer). У каждой операции есть cashback_rub — начисленный кэшбэк, 0, если не начислен.

Для каждого клиента с хотя бы одной покупкой верните client_id, purchases — число покупок и cashback_pct — процент покупок с кэшбэком больше нуля, округлённый до одного знака. Переводы не учитывайте. Порядок — по client_id.

В работе: Проверка, как часто кэшбэк реально срабатывает у клиента, перед сменой категорий месяца.

Таблицы

card_ops — одна строка — одна операция по карте

КолонкаТипЧто значит
op_idintключ
client_idintклиент
op_typetextpurchase / transfer
amount_rubnumericсумма
cashback_rubnumericкэшбэк, 0 — не начислен

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

card_ops · 9 строк

op_idclient_idop_typeamount_rubcashback_rub
11purchase129012,9
21purchase4504,5
31purchase32000
42purchase8608,6
52purchase990
62purchase1500
72purchase24000
82transfer50000
93purchase7100

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

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

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