Все три SQL оконные функции присваивают номера строкам в результирующем наборе, но они различаются тем, как обрабатывают совпадения и последовательную нумерацию.
Присваивает строго уникальный последовательный номер каждой строке. Никакие две строки не получают одинаковый номер, даже если их значения идентичны — совпадения разрешаются произвольно.
Пример: 1, 2, 3, 4
Присваивает одинаковый ранг совпадающим строкам, но пропускает номера после них, чтобы учесть совпадение, оставляя пробелы в последовательности.
Пример: 1, 1, 3, 4
Номер 2 пропущен, потому что две строки имеют ранг 1.
Присваивает одинаковый ранг совпадающим строкам, но не пропускает номера — следующее отличное значение всегда получает следующий ранг по порядку.
Пример: 1, 1, 2, 3
| Функция | Совпадения получают одинаковый ранг? | Пробелы в последовательности? |
|---|---|---|
ROW_NUMBER() | Нет | Нет |
RANK() | Да | Да |
DENSE_RANK() | Да | Нет |
ROW_NUMBER(), когда нужен уникальный идентификатор для каждой строки — например, для пагинацииRANK(), когда пробелы важны — например, в турнирной таблицеDENSE_RANK(), когда нужен последовательный ранг без пробелов — например, при группировке элементов по уровню приоритетаROW_NUMBER() присваивает строго уникальные последовательные номера каждой строке, то есть даже если две строки имеют одинаковые значения в столбце сортировки, они получат разные номера строк.
Новый — ещё не проверен сообществом
Вы