Вы написали SUM(amount) OVER (ORDER BY paid_at) и ожидали накопительную сумму по каждому пользователю, но сумма растёт сквозь всех пользователей. Что нужно добавить в OVER, чтобы накопление считалось отдельно по каждому пользователю?

AДобавить PARTITION BY user_id, чтобы окно сбрасывалось на границе каждого пользователя
BУбрать ORDER BY paid_at, чтобы сумма перестала накапливаться по времени
CДобавить GROUP BY user_id рядом с оконной функцией для группировки
DЗаменить SUM на RANK, чтобы получить накопление по позиции строки
Правильный ответ. PARTITION BY разделяет окно на независимые группы строк.

Разбор

Без PARTITION BY окно одно на весь набор строк, поэтому кумулятивная сумма считается глобально. Добавив PARTITION BY user_id, вы получите независимую кумулятивную сумму внутри каждого пользователя, а ORDER BY paid_at задаст порядок накопления по времени. GROUP BY и оконная функция несовместимы в этой логике, а RANK считает позиции строк, а не суммы.

Проверь себя · 1/3разбор после ответа
Вы написали SUM(amount) OVER (ORDER BY paid_at) и ожидали накопительную сумму по каждому пользователю, но сумма растёт сквозь всех пользователей. Что нужно добавить в OVER, чтобы накопление считалось отдельно по каждому пользователю?
Тренировать SQL в Telegram

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