Нужно пронумеровать заказы каждого пользователя по времени покупки, начиная с 1, чтобы потом найти 1-й, 2-й, 3-й заказ. Какое выражение подходит?
A
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY order_at)B
ROW_NUMBER() OVER (ORDER BY order_at)C
RANK() OVER (PARTITION BY user_id ORDER BY order_at)D
SUM(order_id) OVER (PARTITION BY user_id ORDER BY order_at)Правильный ответ.
PARTITION BY сбрасывает счетчик для каждого пользователя, а ORDER BY задает порядок нумерации.Разбор
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY order_at) считает порядковый номер строки внутри каждого user_id, упорядочивая заказы по order_at. Без PARTITION BY номера будут общими на весь датасет. RANK() и DENSE_RANK() полезны для мест/тайов, но для «какая по счету покупка» обычно нужен именно ROW_NUMBER().
Проверь себя · 1/3разбор после ответа
Вы написали
SUM(amount) OVER (ORDER BY paid_at) и ожидали накопительную сумму по каждому пользователю, но сумма растет сквозь всех пользователей. Что нужно добавить в OVER, чтобы накопление считалось отдельно по каждому пользователю?Ещё вопросы по теме «Оконные функции»
- В одной категории 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`, включая все товары, которые делят эти значения (при равных значениях). Какой вариант даст нужный результат?
- В таблице платежей нужно вывести для каждой транзакции накопительную сумму платежей пользователя на этот момент (running total). Какое выражение даст накопительный итог по пользователю?
- Все вопросы по «Оконные функции» →