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

221. Выручка к прошлому дню активности

Лёгкая

В revenue одна строка на пользователя и день, когда он принёс деньги: event_date, user_id, revenue (целые рубли).

Добавьте колонку share: выручка пользователя в этот день, делённая на его выручку в предыдущий день, когда он был активен. Дни без строки пропускаются: если покупатель платил 3-го и 5-го ноября, 5-е сравнивается с 3-м.

Для первого дня пользователя и для деления на 0 в share — NULL. Округление до 2 знаков. Порядок: event_date по убыванию, затем user_id.

В работе: Отчёт о платящих пользователях: кто резко сократил траты на продвижение объявлений.

Таблицы

revenue — одна строка — пользователь и день с выручкой

КолонкаТипЧто значит
event_datedateдень
user_idintпользователь
revenueintвыручка, руб.

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

revenue · 6 строк

event_dateuser_idrevenue
2025-11-0311400
2025-11-0411600
2025-11-0511300
2025-11-03121000
2025-11-0512250
2025-11-041390

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

event_dateuser_idrevenueshare
2025-11-05113000,5
2025-11-05122500,25
2025-11-04116001,5
2025-11-041390NULL
2025-11-0311400NULL
2025-11-03121000NULL
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
event_date, user_id, revenue, share
оконные функцииNULL

Источник: тестовое аналитика данных (Middle) в Авито, сборник No Data No Growth. Условие пересказано своими словами.