Ответ вслух Middle SQL для продуктовых метрик обновлено

Как вы пишете метрический запрос

Вопрос

Вам дали таблицы пользователей, событий и заказов и попросили посчитать конверсию в повторную покупку по каналам. Как вы будете рассуждать вслух?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Сначала уточняю определение: повторная покупка это второй заказ в любой момент или в течение 30 дней после первого, учитываются ли отмены. Решаю, что зерно расчёта строка на пользователя.

Что должно прозвучать в ответе

  • Уточнить определение: окно, кого считаем покупателем, повтор

  • Определить зерно: строка на пользователя

  • Собрать CTE: первый заказ, число заказов

  • LEFT JOIN, чтобы не потерять знаменатель

  • Проверить на маленьком примере и граничных случаях

  • Сверить итоги с известными числами

Что могут спросить следом

  • Как проверить, что запрос не задваивает строки?
  • Что если заказы бывают отменённые?

Разбор

Сначала уточняю определение: повторная покупка это второй заказ в любой момент или в течение 30 дней после первого, учитываются ли отмены. Решаю, что зерно расчёта строка на пользователя. В CTE считаю для каждого покупателя число заказов и дату первого, исключаю отменённые. Присоединяю канал из пользователей. Знаменатель это покупатели канала, числитель те, у кого два заказа и больше. Проверяю на паре пользователей вручную, сверяю общее число покупателей с известным отчётом и смотрю, не задвоились ли строки после JOIN, сравнивая COUNT(*) и COUNT(DISTINCT user_id).

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.