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

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

Разбор

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

Проверь себя · 1/3разбор после ответа
Хотите добавить к каждой транзакции колонку «доля от общей суммы транзакций этого пользователя» и при этом не терять детализацию по транзакциям. Какой фрагмент корректен?
Тренировать SQL в Telegram

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