Нужно отфильтровать завершённые заказы за согласованный интервал, сгруппировать по user_id и отсортировать SUM(amount) по убыванию. «Последний месяц» важно уточнить: календарный или скользящий.
Напишите SQL-запрос: найти top-3 user_id по сумме amount для заказов со статусом COMPLETED за последний месяц.
Нужно отфильтровать завершённые заказы за согласованный интервал, сгруппировать по user_id и отсортировать SUM(amount) по убыванию. «Последний месяц» важно уточнить: календарный или скользящий.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Нужно отфильтровать завершённые заказы за согласованный интервал, сгруппировать по user_id и отсортировать SUM(amount) по убыванию. «Последний месяц» важно уточнить: календарный или скользящий.
Пример PostgreSQL за предыдущий календарный месяц в timezone сессии:
SELECT user_id, SUM(amount) AS total_amount
FROM orders
WHERE status = 'COMPLETED'
AND created_at >= date_trunc('month', CURRENT_TIMESTAMP) - INTERVAL '1 month'
AND created_at < date_trunc('month', CURRENT_TIMESTAMP)
GROUP BY user_id
ORDER BY total_amount DESC NULLS LAST, user_id
LIMIT 3;
Предполагаются соответствующие имена колонок и одна валюта. Для разных валют суммы нельзя складывать без правила пересчёта. LIMIT выбирает ровно до трёх строк; включение всех равных мест требует ранжирования.