В одной категории 4 товара с выручкой 100, 100, 90 и 80. Вычисляем RANK() OVER (ORDER BY revenue DESC). Какие ранги получат строки при сортировке по убыванию выручки?

A1, 1, 3, 4
B1, 1, 2, 3
C1, 2, 3, 4
D1, 1, 2, 4
Правильный ответ. RANK присваивает одинаковый ранг равным значениям и делает пропуски в нумерации после равенства.

Разбор

При RANK() OVER (ORDER BY revenue DESC) одинаковые значения выручки получают один ранг, а следующий после равенства увеличивается на количество строк в группе. Поэтому 100 и 100 получают ранг 1, а 90 — уже ранг 3 (а не 2). Для сравнения: ROW_NUMBER() всегда даёт уникальные номера 1, 2, 3, 4, а DENSE_RANK() не делает пропусков — 1, 1, 2, 3.

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

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