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

SQL: Ранжирование заказов клиента

1.7 Middle🔥 211 комментариев
#Ratio-метрики#SQL и базы данных#Метрики продукта

Условие

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

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

Для каждого заказа определите его порядковый номер для данного клиента и сравните с предыдущим заказом.

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

Таблица с колонками: customer_id, order_id, order_date, amount, order_number, prev_order_amount, amount_change

Источник: задача на оконные функции

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

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

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

Ранжирование и сравнение заказов SQL

SELECT customer_id, order_id, order_date, amount, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date) as order_number, LAG(amount) OVER (PARTITION BY customer_id ORDER BY order_date) as prev_order_amount, ROUND(amount - LAG(amount) OVER (PARTITION BY customer_id ORDER BY order_date), 2) as amount_change, ROUND(100.0 * (amount - LAG(amount) OVER (PARTITION BY customer_id ORDER BY order_date)) /

    LAG(amount) OVER (PARTITION BY customer_id ORDER BY order_date), 1) as percent_change

FROM orders ORDER BY customer_id, order_date

Объяснение:

  • ROW_NUMBER: порядковый номер заказа для клиента
  • LAG: получаем сумму предыдущего заказа
  • amount_change: разница между текущим и предыдущим заказом
  • percent_change: процентное изменение (рост/падение чека)

Пример результата:

customer_id | order_id | amount | order_number | prev_amount | change | percent_change
    1       |    100   | 50.00  |      1       |    NULL     | NULL   |    NULL
    1       |    101   | 75.00  |      2       |    50.00    | 25.00  |    50.0
    1       |    102   | 70.00  |      3       |    75.00    | -5.00  |    -6.7
    2       |    103   | 100.00 |      1       |    NULL     | NULL   |    NULL
    2       |    104   | 110.00 |      2       |    100.00   | 10.00  |    10.0

Случаи использования:

  • Анализ тренда среднего чека по клиентам
  • Выявление клиентов с растущим чеком (рост продаж)
  • Выявление чурна (падение суммы заказа перед уходом)
  • LTV прогнозирование
SQL: Ранжирование заказов клиента | PrepBro