Выбор ответа Middle SQL дата-инженера спрашивают часто обновлено
Рамка окна по умолчанию
Вопрос
Что посчитает SUM(amount) OVER (PARTITION BY user_id ORDER BY day) без явной рамки?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Нарастающий итог от начала раздела до текущей строки, вместе с равными по day. При наличии ORDER BY рамка по умолчанию RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.
Варианты ответа
- Сумму по всему разделу пользователя, одинаковую на каждой строке раздела
- Нарастающий итог от начала раздела до текущей строки, вместе с равными по
dayправильный ответ - Сумму только текущей строки, потому что рамка по умолчанию равна одной строке
- Ошибку: при ORDER BY в окне рамку нужно указывать явно, иначе запрос не выполнится
Разбор
При наличии ORDER BY рамка по умолчанию RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. Из-за RANGE строки с одинаковым day попадают в рамку вместе, и у них одинаковый итог. Сумма по всему разделу будет без ORDER BY. Рамка из одной строки задаётся явно. Ошибки нет: это обычный нарастающий итог.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.