SobesLab логотип SobesLab

Ответ

Обе функции назначают ранговый номер строкам в отсортированном порядке внутри группы (OVER PARTITION). Различие проявляется при наличии «ничьих» (равных значений): RANK() присваивает одинаковым значениям одинаковый ранг, но пропускает следующий номер (например, 1, 2, 2, 4...), а DENSE_RANK() тоже даёт одинаковый ранг равным значениям, но следующий ранг идет без разрывов (1, 2, 2, 3...). То есть DENSE_RANK «уплотняет» нумерацию, не оставляя дыр, а RANK оставляет разрыв в рангах после группы равных значений.