Различия в вариантах ранжирования по очкам

Привет,

Кто-нибудь знает разницу между опциями dense_rank / rank / row_number в стратегии ранжирования score ranking?

row_number () → bigint
Возвращает номер текущей строки в пределах её группы, начиная с 1.

rank () → bigint
Возвращает ранг текущей строки с пропусками; то есть row_number первой строки в её группе одинаковых значений.

dense_rank () → bigint
Возвращает ранг текущей строки без пропусков; эта функция фактически подсчитывает группы одинаковых значений.

По сути, это изменяет способ обработки совпадений.

  • В row_number совпадений нет.
  • В rank, если две строки занимают позицию 5, следующая будет иметь позицию 7, так как 6 пропускается.
  • В dense_rank, если две строки занимают позицию 5, следующая будет иметь позицию 6.