В одной категории 4 товара с выручкой 100, 100, 90 и 80. Вычисляем RANK() OVER (ORDER BY revenue DESC). Какие ранги получат строки при сортировке по убыванию выручки?
A
1, 1, 3, 4B
1, 1, 2, 3C
1, 2, 3, 4D
1, 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 место (без пропуска). Какая функция подходит лучше всего?
Ещё вопросы по теме «Оконные функции»
- Вы ищете последнюю транзакцию пользователя, используя `ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY paid_at DESC)` и оставляя `row_number = 1`. Что верно, если у пользователя две транзакции с одинаковым `paid_at`?
- Вы делаете рейтинг товаров по выручке внутри категории. Если два товара делят 2 место, следующий товар должен получить 3 место (без пропуска). Какая функция подходит лучше всего?
- В каждой категории нужно выбрать товары с тремя наибольшими различными значениями выручки (`revenue`), включая все товары, которые делят эти значения при равенстве. Какой вариант даст нужный результат?
- Нужно пронумеровать заказы каждого пользователя по времени покупки, начиная с 1, чтобы найти его 1-й, 2-й, 3-й заказ. Какое выражение подходит?
- В таблице платежей для каждой транзакции нужен накопительный итог сумм пользователя на этот момент. Какое выражение даёт корректный результат?
- Все вопросы по «Оконные функции» →