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

20. Воронка: просмотр, контакт, сделка с доставкой

Средняя

В events — действия покупателей с объявлениями: view (открыл карточку), contact (написал или позвонил), deal (оформил покупку с доставкой). Логирование иногда пишет одно событие дважды.

Воронку считаем по парам «покупатель — объявление». Пара прошла шаг view, если есть просмотр; шаг contact — если есть контакт не раньше первого просмотра; шаг deal — если есть сделка не раньше первого такого контакта.

Верните три строки в порядке шагов view, contact, deal: step, pairs — сколько пар дошли до шага, pct_of_prev — процент от предыдущего шага с одним знаком (у view — NULL, при нуле в предыдущем шаге — NULL).

В работе: Оценка, где теряются покупатели в сделках с доставкой.

Таблицы

events — одна строка — одно событие, возможны дубли

КолонкаТипЧто значит
event_idintключ
user_idintпокупатель
listing_idintобъявление
event_typetextview / contact / deal
event_attimestampвремя

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

events · 7 строк

event_iduser_idlisting_idevent_typeevent_at
111501view2026-05-01T10:00:00
211501contact2026-05-01T10:03:00
311501deal2026-05-01T12:00:00
412501view2026-05-01T11:00:00
512501contact2026-05-01T11:30:00
613502view2026-05-02T09:00:00
714503view2026-05-02T09:30:00

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

steppairspct_of_prev
view4NULL
contact250
deal150
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
step, pairs, pct_of_prev
воронкаCTEDISTINCTоконные функции

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

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