Как посчитать Discount Rate в SQL

Закрепи формулу discount rate в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать discount rate в Telegram

Зачем Discount Rate

Маркетинг катит акции: «-30% на бренд X — продажи +50%». Аналитик копает: average discount rate вырос с 8% до 22%. Прибыль (margin) упала, несмотря на рост revenue. Discount rate — early warning.

Формула

Discount Rate = total_discount / gross_revenue × 100%
Effective Discount per Order = discount_amount / list_price

Базовый расчёт

Данные: orders(order_id, user_id, list_price, discount_amount, total_paid).

SELECT
    DATE_TRUNC('month', created_at) AS month,
    SUM(list_price) AS gross_revenue,
    SUM(discount_amount) AS total_discount,
    SUM(discount_amount)::NUMERIC * 100 / NULLIF(SUM(list_price), 0) AS discount_rate_pct
FROM orders
WHERE status = 'paid'
GROUP BY 1
ORDER BY 1;

Доля заказов со скидкой

SELECT
    DATE_TRUNC('month', created_at) AS month,
    COUNT(*) AS total_orders,
    COUNT(*) FILTER (WHERE discount_amount > 0) AS with_discount,
    COUNT(*) FILTER (WHERE discount_amount > 0)::NUMERIC * 100
        / NULLIF(COUNT(*), 0) AS pct_discounted
FROM orders
WHERE status = 'paid'
GROUP BY 1
ORDER BY 1;
Закрепи формулу discount rate в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать discount rate в Telegram

По сегментам

По категории / каналу:

SELECT
    category,
    COUNT(*) AS orders,
    AVG(discount_amount / NULLIF(list_price, 0)) * 100 AS avg_discount_pct,
    SUM(discount_amount)::NUMERIC * 100 / NULLIF(SUM(list_price), 0) AS weighted_discount_pct
FROM orders
WHERE status = 'paid'
  AND created_at >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY category
ORDER BY weighted_discount_pct DESC;

weighted vs avg: weighted учитывает order size, avg — нет. Разные результаты.

Частые ошибки

Ошибка 1. Average % vs weighted %. Average просто avg(discount/list). Weighted = sum(discount)/sum(list). Большие заказы влияют сильнее в weighted.

Ошибка 2. Включать тестовые промо. Внутренние / staff promos искажают. Фильтруйте.

Ошибка 3. Игнорировать stacking. Если 2 скидки stack — total discount больше любой individual.

Ошибка 4. Refunded orders. Если orders refunded, discount тоже refunded. Считайте net.

Ошибка 5. Сравнивать с retail price misleading. В fashion list price часто inflated. Real discount меньше.

Связанные темы

FAQ

Какой Discount Rate считается ok?

Fashion: 20-40% (sample sales). Электроника: 5-15%. FMCG: 10-25%. Зависит от модели бизнеса.

Discount Rate растёт — плохо?

Если revenue растёт ещё быстрее — может быть ок. Если revenue стоит / падает — точно плохо.

Average или weighted?

Weighted показывает реальную экономику. Average — для distribution analysis.

Доля discounted orders vs Discount Rate?

«100% orders discounted at 5%» vs «10% orders discounted at 50%» — Discount Rate одинаковый, но first означает full markdown, second — promo spike.

Discount Rate vs gross margin?

Тесно связаны: high discount → low margin. Декомпозиция: gross margin drop = COGS rise + Discount rise.