Без ORDER BY SUM по окну считает итог всей группы user_id. С ORDER BY стандартная рамка обычно делает итог накопительным до текущего значения сортировки, включая равные даты.
Оконная функция SUM() OVER (PARTITION BY user_id) — в одном случае добавляем ORDER BY дата покупки, в другом нет. В чём разница?
Без ORDER BY SUM по окну считает итог всей группы user_id. С ORDER BY стандартная рамка обычно делает итог накопительным до текущего значения сортировки, включая равные даты.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Без ORDER BY SUM по окну считает итог всей группы user_id. С ORDER BY стандартная рамка обычно делает итог накопительным до текущего значения сортировки, включая равные даты.
При одинаковой дате несколько строк могут получить одну и ту же сумму, поскольку типичная рамка по умолчанию — RANGE UNBOUNDED PRECEDING … CURRENT ROW.
Для построчного накопления задайте ORDER BY purchase_date, order_id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. Для общего итога без накопления оставьте только PARTITION BY либо явно задайте полную рамку. Точный синтаксис и ограничения рамок зависят от СУБД.