Нужно пронумеровать заказы каждого пользователя по времени покупки, начиная с 1, чтобы найти его 1-й, 2-й, 3-й заказ. Какое выражение подходит?

AROW_NUMBER() OVER (ORDER BY order_at)
BROW_NUMBER() OVER (PARTITION BY user_id ORDER BY order_at)
CRANK() OVER (PARTITION BY user_id ORDER BY order_at)
DSUM(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 по возрастанию времени покупки. Без PARTITION BY номера будут общими на всю таблицу. RANK() уместен, когда важны места и допустимы тайы (одинаковое время даст одинаковые ранги). SUM(...) OVER (...) считает нарастающий итог, а не порядковый номер.

Можно заниматься бесплатно

Готовим вопросы…

Три вопроса по теме этой страницы, с объяснениями.

Продолжить в браузере

Ещё вопросы по теме «Оконные функции»