Как посчитать Discount Rate в SQL
Содержание:
Зачем 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;По сегментам
По категории / каналу:
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 меньше.
Связанные темы
- Как посчитать AOV в SQL
- Как посчитать gross margin в SQL
- Как посчитать ROAS в SQL
- Как посчитать revenue в SQL
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.