В таблице с месячной выручкой (по одной строке на пользователя и месяц) нужно посчитать изменение относительно прошлого месяца: текущая revenue минус прошлая revenue. Какое выражение корректно?
A
revenue - LEAD(revenue) OVER (PARTITION BY user_id ORDER BY month)B
revenue - LAG(revenue) OVER (PARTITION BY user_id)C
revenue - LAG(revenue) OVER (PARTITION BY user_id ORDER BY month)D
revenue - SUM(revenue) OVER (PARTITION BY user_id ORDER BY month)Правильный ответ. Для сравнения «текущий период минус прошлый» нужна
LAG с сортировкой по времени.Разбор
LAG(revenue) OVER (PARTITION BY user_id ORDER BY month) возвращает значение revenue из предыдущего месяца для того же user_id. Тогда разница revenue - LAG(revenue) ... даёт изменение от прошлого периода к текущему. Без сортировки по month понятие «предыдущий месяц» не определено. С LEAD вы сравните текущий месяц со следующим, то есть получите сдвиг вперёд, а SUM(...) OVER посчитает накопленный итог, а не разницу.
Проверь себя · 1/3разбор после ответа
В одной категории 4 товара с выручкой 100, 100, 90 и 80. Вычисляем
RANK() OVER (ORDER BY revenue DESC). Какие ранги получат строки при сортировке по убыванию выручки?Ещё вопросы по теме «Оконные функции»
- В одной категории 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-й заказ. Какое выражение подходит?
- Все вопросы по «Оконные функции» →