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

68. Траты клиента за 90 дней и его доля в сегменте

Средняя

В clients — клиенты и их сегмент (массовый, премиум, private). В card_tx — покупки по картам, суммы положительные.

Отчёт строится на 30 июня 2026 за последние 90 дней — со 2 апреля по 30 июня включительно. Для каждого клиента верните client_id, segment, spent_rub — сумму покупок за период (0, если покупок не было) и share_pct — долю этой суммы от суммы всего его сегмента, в процентах с двумя знаками.

Если в сегменте за период никто ничего не купил, доля пустая. Порядок: segment, затем share_pct от большей (пустые в конце), затем client_id.

В работе: Кто делает основную выручку сегмента — список для персонального менеджера.

Таблицы

clients — клиенты

КолонкаТипЧто значит
client_idintключ
nametextимя
segmenttextсегмент

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

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

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

clients · 5 строк

client_idnamesegment
1Ирина Соколовапремиум
2Тимур Валиевпремиум
3Анна Киммассовый
4Олег Дьяченкомассовый
5Мария Лаптевамассовый

card_tx · 6 строк

tx_idclient_idtx_atamount_rub
112026-04-10T12:00:0060000
222026-05-15T19:00:0020000
322026-06-01T10:00:0020000
432026-06-20T08:30:003000
542026-05-02T14:00:001000
632026-03-30T10:00:0050000

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

client_idsegmentspent_rubshare_pct
3массовый300075
4массовый100025
5массовый00
1премиум6000060
2премиум4000040
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 5 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
client_id, segment, spent_rub, share_pct
оконные функцииLEFT JOINдатыNULL

Источник: статья о собеседовании аналитиком в Т-Банке, 2026. Условие пересказано своими словами.

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