Хотите добавить к каждой транзакции колонку «доля от общей суммы транзакций этого пользователя» и при этом не терять детализацию по транзакциям. Какой фрагмент корректен?

Aamount / SUM(amount)
Bamount / SUM(amount) OVER (PARTITION BY user_id)
Camount / SUM(amount) OVER (ORDER BY paid_at)
Damount / SUM(amount) GROUP BY user_id
Правильный ответ. Оконная агрегация считает итог по группе и возвращает его в каждой строке, сохраняя гранулярность.

Разбор

Фрагмент amount / SUM(amount) OVER (PARTITION BY user_id) считает общий SUM(amount) по каждому user_id и делит сумму конкретной транзакции на этот общий итог. Так сохраняются все строки транзакций, что важно для анализа вкладов/долей. Если использовать GROUP BY user_id, вы схлопнете данные до одной строки на пользователя и потеряете детализацию по транзакциям.

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

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