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

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, вы схлопнете данные до одной строки на пользователя и потеряете детализацию по транзакциям.

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

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

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

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

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