SQL-продажи после коммуникации и поиск аномальных значений

Клиентов находят через EXISTS: январская коммуникация и продажа в следующие 30 дней. Во второй задаче значения разделяют относительно среднего; для приведённого списка аномальны 5000, 1300 и 2000.

Короткий ответ

Что ответить на собеседовании

Клиентов находят через EXISTS: январская коммуникация и продажа в следующие 30 дней. Во второй задаче значения разделяют относительно среднего; для приведённого списка аномальны 5000, 1300 и 2000.

Подробный разбор

Ответ с пояснениями

Условие

Найди всех клиентов в январе, у которых после коммуникации в течении 30 дней была хотя бы одна продажа.

sales

id customer_id amount sale_date [phone]

communications

id customer_id type comm_date partition_date 1 1 mail [phone] call [phone] call [phone] email [phone] sms [phone]

#Есть список нужно написать функцию, которая вернет два списка, один с нормальными значениями, второй с аномалиями. Пусть для начала аномалия это значение, которое превышает среднее значение

data = [100, 200, 150, 5000, 1300, 120, 700, 2000, 200]

Ответ

Клиентов находят через EXISTS: январская коммуникация и продажа в следующие 30 дней. Во второй задаче значения разделяют относительно среднего; для приведённого списка аномальны 5000, 1300 и 2000.

Это две независимые задачи. Считаем январь месяцем коммуникации; границу 30 дней включаем, момент самой коммуникации исключаем. Параметры задают начало января и февраля нужного года. PostgreSQL:

SELECT DISTINCT c.customer_id
FROM communications c
WHERE c.comm_date >= :january_start
  AND c.comm_date < :february_start
  AND EXISTS (
    SELECT 1 FROM sales s
    WHERE s.customer_id = c.customer_id
      AND s.sale_date > c.comm_date
      AND s.sale_date <= c.comm_date + INTERVAL '30 days'
  );

Февральские продажи исключать нельзя. Для числового списка Python:

def split_values(data):
    if not data:
        return [], []
    mean = sum(data) / len(data)
    normal = [x for x in data if x <= mean]
    anomalies = [x for x in data if x > mean]
    return normal, anomalies

Среднее равно 9770/9. Правило «выше среднего» задано условием, но само по себе не является надёжным статистическим детектором аномалий.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее