В таблице платежей нужно вывести для каждой транзакции накопительную сумму платежей пользователя на этот момент (running total). Какое выражение даст накопительный итог по пользователю?

ASUM(amount) OVER (PARTITION BY user_id)
BSUM(amount) с GROUP BY user_id
CSUM(amount) OVER (PARTITION BY user_id ORDER BY paid_at)
DSUM(amount) OVER (ORDER BY paid_at)
Правильный ответ. Накопительный итог требует ORDER BY в окне, а раздельность по пользователям — PARTITION BY.

Разбор

SUM(amount) OVER (PARTITION BY user_id ORDER BY paid_at) суммирует amount внутри каждого user_id в порядке paid_at, возвращая кумулятивный итог в каждой строке. Без ORDER BY получится общий итог по пользователю, повторенный в каждой строке. Без PARTITION BY накопление будет считаться по всем пользователям вместе, что ломает пользовательскую аналитику.

Проверь себя · 1/3разбор после ответа
Что именно посчитает выражение SUM(amount) OVER (PARTITION BY campaign_id ORDER BY event_time) в таблице платежей по кампаниям?
Тренировать SQL в Telegram

Ещё вопросы по теме «Оконные функции»