Что именно посчитает выражение 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) даёт кумулятивный итог на каждой строке. Это полезно для построения накопительных графиков расходов или выручки по кампаниям, не теряя детализацию по событиям.
Можно заниматься бесплатно
Готовим вопросы…
Три вопроса по теме этой страницы, с объяснениями.
Ещё вопросы по теме «Оконные функции»
- В одной категории 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-й заказ. Какое выражение подходит?
- Все вопросы по «Оконные функции» →