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

56. Баланс бонусов СберСпасибо

Лёгкая

В spasibo_ops — операции с бонусами: accrual — начисление, redeem — списание при оплате, expire — сгорание. В points всегда положительное число.

Посчитайте текущий баланс каждого клиента из clients. У клиента без операций баланс 0.

Верните client_id, full_name, balance. Порядок — по balance по убыванию, затем по client_id.

В работе: Экран «Мои бонусы» и сверка с процессингом партнёров.

Таблицы

clients — участники программы

КолонкаТипЧто значит
client_idintключ
full_nametextФИО

spasibo_ops — операции с бонусами

КолонкаТипЧто значит
op_idintключ
client_idintклиент
op_typetextaccrual / redeem / expire
pointsintколичество, > 0
op_attimestampвремя

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

clients · 4 строки

client_idfull_name
1Елена Морозова
2Тимур Галиев
3Виктория Пак
4Артём Зуев

spasibo_ops · 5 строк

op_idclient_idop_typepointsop_at
11accrual12002026-02-01T10:00:00
21redeem5002026-02-10T12:00:00
32accrual3002025-03-01T09:00:00
42expire3002026-03-01T00:00:00
53accrual25002026-01-15T18:30:00

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

client_idfull_namebalance
3Виктория Пак2500
1Елена Морозова700
2Тимур Галиев0
4Артём Зуев0
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
client_id, full_name, balance
LEFT JOINусловная агрегацияNULL

Источник: на данных Сбера: бонусная программа СберСпасибо. Условие пересказано своими словами.

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