Напишите SQL для добавления нарастающего итога суммы заказа в разрезе пользователя и даты.

Нарастающий итог считают SUM(amount) OVER с разделением по пользователю, порядком по дате и явной рамкой ROWS. При одинаковых датах нужен устойчивый дополнительный ключ.

Короткий ответ

Что ответить на собеседовании

Нарастающий итог считают SUM(amount) OVER с разделением по пользователю, порядком по дате и явной рамкой ROWS. При одинаковых датах нужен устойчивый дополнительный ключ.

Подробный разбор

Ответ с пояснениями

Нарастающий итог считают SUM(amount) OVER с разделением по пользователю, порядком по дате и явной рамкой ROWS. При одинаковых датах нужен устойчивый дополнительный ключ.

Для таблицы orders(order_id, user_id, order_dt, amount):

SELECT order_id, user_id, order_dt, amount,
       SUM(amount) OVER (
           PARTITION BY user_id
           ORDER BY order_dt, order_id
           ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
       ) AS running_total
FROM orders
ORDER BY user_id, order_dt, order_id;

Это итог после каждого заказа. Если нужна одна строка на день, сначала агрегируйте суммы по user_id и дате, затем примените окно к дневным строкам. Валюту и обработку возвратов нужно согласовать до суммирования.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее