Выбор ответа Senior Оконные функции обновлено
Нарастающий итог при одинаковых датах
Вопрос
В таблице три платежа: 1 марта на 100, 2 марта на 50 и ещё 2 марта на 30. Что будет в running у двух мартовских платежей от 2 числа?
SELECT paid_at, amount,
SUM(amount) OVER (ORDER BY paid_at) AS running
FROM payments;
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: 180 и 180. Если в OVER есть ORDER BY, рамка по умолчанию RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, а RANGE включает все строки, равные текущей по ключу сортировки (peers).
Варианты ответа
- 150 и 180
- 130 и 180
- 180 и 180правильный ответ
- 50 и 30
Разбор
Если в OVER есть ORDER BY, рамка по умолчанию RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, а RANGE включает все строки, равные текущей по ключу сортировки (peers). Обе строки за 2 марта видят 100 + 50 + 30 = 180. Построчный итог (150 и 180 в зависимости от порядка) дала бы рамка ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW с однозначной сортировкой. «50 и 30» было бы без накопления.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Оконные функции»
- Через сколько дней второй заказ
- Какие дубли удалить, оставив свежую запись
- Самый высоко- и низкооплачиваемый в отделе
- Самая длинная серия дней подряд
- Рост выручки к прошлому месяцу
- Скользящее среднее выручки за 3 дня
- Длинные перерывы между оплатами
- Разбиение кликов на сессии