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

31. Помесячные траты топ-3 клиентов

Средняя

По transact выберите трёх клиентов с наибольшей суммой покупок за всю историю. При равных суммах выше тот, у кого меньше id_client. В исходном задании — топ-100, здесь топ-3 под небольшие данные.

Для этих клиентов верните траты по месяцам: client_id, month (первое число месяца), spent_rub. Месяцы без покупок не выводите. Порядок — по client_id, затем month.

В работе: Разбор самых ценных клиентов банка: стабильно ли они тратят или топ сделала одна крупная покупка.

Таблицы

clients — клиенты МТС Банка

КолонкаТипЧто значит
client_idintключ
full_nametextимя

transact — одна строка — одна покупка по карте

КолонкаТипЧто значит
id_tranintключ
id_clientintклиент
tran_timetimestampвремя
sum_trannumericсумма, ₽

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

clients · 4 строки

client_idfull_name
1Аркадий Лосев
2Софья Байрамова
3Ринат Хасанов
4Олеся Дорофеева

transact · 7 строк

id_tranid_clienttran_timesum_tran
112025-10-05T10:00:0020000
212025-11-07T10:00:0015000
322025-10-12T10:00:0030000
432025-11-01T10:00:009000
532025-11-20T10:00:008000
642025-12-01T10:00:005000
722025-12-30T10:00:001000

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

client_idmonthspent_rub
12025-10-0120000
12025-11-0115000
22025-10-0130000
22025-12-011000
32025-11-0117000
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
client_id, month, spent_rub
топ-N в группеCTEоконные функцииGROUP BYдаты

Источник: тестовое продуктового аналитика МТС, сборник No Data No Growth. Условие пересказано своими словами.

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