Нужно выбрать ровно один «самый дорогой» заказ пользователя. Если несколько заказов с одинаковым amount, выбрать самый поздний по order_at. Какой ORDER BY внутри ROW_NUMBER() OVER (...) решает задачу?

AROW_NUMBER() OVER (PARTITION BY user_id ORDER BY amount DESC)
BROW_NUMBER() OVER (PARTITION BY user_id ORDER BY amount DESC, order_at DESC)
CRANK() OVER (PARTITION BY user_id ORDER BY amount DESC)
DDENSE_RANK() OVER (PARTITION BY user_id ORDER BY amount DESC)
Правильный ответ. Чтобы детерминированно разрешить равенство значений, добавьте второй ключ в ORDER BY окна.

Разбор

ROW_NUMBER() выбирает ровно одну строку с номером 1. Чтобы при равном amount всегда выбирать самый поздний заказ, порядок должен сначала сортировать по amount DESC, а затем по order_at DESC: ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY amount DESC, order_at DESC). Если оставить только amount DESC, то при равном amount выбор строки может быть нестабильным.

Проверь себя · 1/3разбор после ответа
Вы делаете рейтинг товаров по выручке внутри категории. Если два товара делят 2 место, следующий товар должен получить 3 место (без пропуска). Какая функция подходит лучше всего?
Тренировать SQL в Telegram

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