Вы написали 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 считает позиции строк, а не суммы.

Можно заниматься бесплатно

Готовим вопросы…

Три вопроса по теме этой страницы, с объяснениями.

Продолжить в браузере

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