← Назад к вопросам

SQL: Найти VIP клиентов по правилу Парето

2.0 Middle🔥 111 комментариев
#SQL и базы данных#Метрики продукта

Условие

У вас есть таблица orders:

  • order_id (integer)
  • customer_id (integer)
  • amount (decimal)

Найдите клиентов, которые генерируют 80 процентов выручки (правило Парето).

Ожидаемый результат:

Таблица с колонками: customer_id, total_spent, cumulative_pct

Выведите только клиентов в топ-80 процентов кумулятивной выручки.

Источник: задача на кумулятивные расчеты

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Правило Парето: 80/20

Это правило гласит, что 80% выручки генерируют всего 20% клиентов. Такие клиенты называются VIP и требуют особого внимания.

SQL Решение

WITH customer_totals AS (
    SELECT customer_id, ROUND(SUM(amount), 2) as total_spent
    FROM orders
    GROUP BY customer_id
),
ranked_customers AS (
    SELECT
        customer_id,
        total_spent,
        SUM(total_spent) OVER (ORDER BY total_spent DESC) as cumulative_revenue,
        SUM(total_spent) OVER () as total_revenue
    FROM customer_totals
)
SELECT
    customer_id,
    total_spent,
    ROUND(100.0 * cumulative_revenue / total_revenue, 2) as cumulative_pct
FROM ranked_customers
WHERE cumulative_revenue / total_revenue <= 0.80
ORDER BY total_spent DESC;

Стратегия

  1. Выявление VIP клиентов из топ-80% выручки
  2. Персональный менеджер для каждого
  3. Экстра внимание к удержанию
  4. Специальные условия и предложения
SQL: Найти VIP клиентов по правилу Парето | PrepBro