Оконная функция SUM() OVER (PARTITION BY user_id) — в одном случае добавляем ORDER BY дата покупки, в другом нет. В чём разница?

Без ORDER BY SUM по окну считает итог всей группы 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 либо явно задайте полную рамку. Точный синтаксис и ограничения рамок зависят от СУБД.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее