TGViewer
Продуктовый взгляд | Аналитика данных Продуктовый взгляд | Аналитика данных @prodanalysis · 2.3K subscribers
Post #68 3.04K
Задача из отбора на стажировку Мини-CEO в Т-банк


Условие

Напишите запрос, который выведет среднюю разницу в днях между первым и последним платежом
по закрытым кредитам. Ответ округляйте до целого.

Решение
0) Чтобы получить таблицу где будут кредиты и соответствующие им даты платежей делаем JOIN, по умолчанию функция JOIN работает как INNER JOIN
1) Для каждого кредита находим даты первого и последнего платежа — это можно сделать функциями MAX и MIN. Затем считаем их разницу, предварительно приведя p.payment_date из формата timestamp в date.
2) С помощью AVG усредняем эти разницы по всем закрытым кредитам и округляем до целого.

Когда я в первый раз решал задачу, система выдала вердикт Presentation Error — Ошибка неправильного формата. Первая версия моего кода выглядела так:
SELECT ROUND(AVG(last_date - first_date))
FROM (
    SELECT MIN(p.payment_date) AS first_date, MAX(p.payment_date) AS last_date
    …
) AS diffs;


Ключевой момент в том, что столбец p.payment_date имеет формат timestamp, разность таймстемпов даст интервал "XX days HH:MM:SS" (timestamp – timestamp = interval). AVG(interval) возвращает опять interval. Вызов ROUND(interval) не существует, значит результат будет в формате вида "42 days 11:23:58", которую система считывает, но она не совпадает с ожидаемым форматом (PE).

Если мы приведем payment_date к date, то разность дат даст целое число дней (date – date = integer). AVG(integer) вернет в этом случае numeric. Округляя среднее число дней ROUND(numeric) получим, то что от нас требовали.

SELECT ROUND(AVG(day_diff))
FROM (
    SELECT cr.credit_id, MAX(p.payment_date)::date - MIN(p.payment_date)::date AS day_diff
    FROM credits AS cr
    JOIN payments AS p ON cr.credit_id = p.credit_id
    WHERE cr.status = 'closed'
    GROUP BY cr.credit_id
) AS diffs;


@ProdAnalysis
  • 👍 11
  • ❤‍🔥 2
  • ❤ 2
More from @prodanalysis
  1. Sep 22, 2026Яндекс изменил отбор на аналитиков Раньше процесс состоял из технической секции, алгособес…
  2. Sep 18, 2026Хороший маркетинг обязан нравиться всем? Кейс Сидни Суини говорит, что нет Последние пару…
  3. Sep 16, 2026Если собираетесь на собеседование — держите полезную подборку Хотим поделиться каналом «Ги…
  4. Sep 14, 2026Что происходит с ML после того, как модель обучена Рекомендуем канал Data New Gold. Владим…
  5. Sep 14, 2026Товарищи, Поступашкам нужны контент мейкеры в основной канал по аналитике и другим дисципл…
  6. Sep 13, 2026Можно хорошо считать и всё равно не понимать, зачем нужна твоя работа В рамках открытой не…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →