Что именно посчитает выражение SUM(amount) OVER (PARTITION BY campaign_id ORDER BY event_time) в таблице платежей по кампаниям?
AОдин общий накопительный итог
SUM(amount) по всем кампаниям сразу, упорядоченный по event_time без разбиения по campaign_idBПо одной строке на каждое значение
campaign_id с итоговым SUM(amount) без учёта порядка event_time и без накопленияCСначала отсортирует все строки по
event_time, а затем разделит на группы по campaign_id и пересчитает SUM(amount) зановоDНакопительный итог
SUM(amount) отдельно внутри каждой группы campaign_id, в порядке event_time для каждого окнаПравильный ответ.
PARTITION BY задаёт независимые окна по группам, а ORDER BY — порядок накопления внутри каждой группы.Разбор
Окно разбивается по campaign_id, поэтому суммы считаются независимо для каждой кампании. Внутри каждой кампании строки упорядочиваются по event_time, и SUM(amount) даёт кумулятивный итог на каждой строке. Это полезно для построения накопительных графиков расходов или выручки по кампаниям, не теряя детализацию по событиям.
Проверь себя · 1/3разбор после ответа
Вы хотите сравнить текущую метрику с метрикой следующего периода во временном ряду. Какая оконная функция возвращает «следующее» значение относительно текущей строки по заданному порядку сортировки?
Ещё вопросы по теме «Оконные функции»
- В одной категории 4 товара с выручкой 100, 100, 90 и 80. Вычисляем `RANK() OVER (ORDER BY revenue DESC)`. Какие ранги получат строки при сортировке по убыванию выручки?
- Вы ищете последнюю транзакцию пользователя, используя `ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY paid_at DESC)` и оставляя `row_number = 1`. Что верно, если у пользователя две транзакции с одинаковым `paid_at`?
- Вы делаете рейтинг товаров по выручке внутри категории. Если два товара делят 2 место, следующий товар должен получить 3 место (без пропуска). Какая функция подходит лучше всего?
- В каждой категории нужно выбрать товары с тремя наибольшими различными значениями выручки (`revenue`), включая все товары, которые делят эти значения при равенстве. Какой вариант даст нужный результат?
- Нужно пронумеровать заказы каждого пользователя по времени покупки, начиная с 1, чтобы найти его 1-й, 2-й, 3-й заказ. Какое выражение подходит?
- Все вопросы по «Оконные функции» →