Выбор ответа Middle SQL дата-инженера спрашивают часто обновлено

Рамка окна по умолчанию

Вопрос

Что посчитает SUM(amount) OVER (PARTITION BY user_id ORDER BY day) без явной рамки?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Нарастающий итог от начала раздела до текущей строки, вместе с равными по day. При наличии ORDER BY рамка по умолчанию RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.

Варианты ответа

  1. Сумму по всему разделу пользователя, одинаковую на каждой строке раздела
  2. Нарастающий итог от начала раздела до текущей строки, вместе с равными по dayправильный ответ
  3. Сумму только текущей строки, потому что рамка по умолчанию равна одной строке
  4. Ошибку: при ORDER BY в окне рамку нужно указывать явно, иначе запрос не выполнится

Разбор

При наличии ORDER BY рамка по умолчанию RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. Из-за RANGE строки с одинаковым day попадают в рамку вместе, и у них одинаковый итог. Сумма по всему разделу будет без ORDER BY. Рамка из одной строки задаётся явно. Ошибки нет: это обычный нарастающий итог.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.