Описание: в этой статье вы узнаете о функции DENSE_RANK() в MySQL и о том, как ее применять, чтобы найти ранг строки в разделе или наборе результатов.
DENSE_RANK() является функция окна, которая присваивает ранг каждой строки в пределах раздела или результирующего набора без пробелов в рейтинге значений.
Ранг строки увеличивается на единицу из числа различных значений ранга, которые идут перед строкой.
Синтаксис функции DENSE_RANK() следующий:
DENSE_RANK() OVER ( PARTITION BY <expression>[{,<expression>...}] ORDER BY <expression> [ASC|DESC], [{,<expression>...}] )
В этом синтаксисе:
Если в разделе есть две или более строк с одинаковым значением ранга, каждой из этих строк будет присвоен одинаковый ранг.
В отличие от функции RANK(), функция DENSE_RANK() всегда возвращает последовательные значения ранга.
Предположим, у нас есть таблица t с некоторыми примерами данных:
CREATE TABLE t ( val INT ); INSERT INTO t(val) VALUES(1),(2),(2),(3),(4),(4),(5); SELECT * FROM t;
Следующий оператор использует функцию DENSE_RANK() для присвоения ранга каждой строке:
SELECT val, DENSE_RANK() OVER ( ORDER BY val ) my_rank FROM t;
Для демонстрации мы будем использовать таблицу sales, созданную в руководстве по оконным функциям.
Следующий оператор использует функцию DENSE_RANK() для ранжирования сотрудников по продажам по сумме продаж.
SELECT sales_employee, fiscal_year, sale, DENSE_RANK() OVER (PARTITION BY fiscal_year ORDER BY sale DESC ) sales_rank FROM sales;
В этом примере:
В этой статье вы узнали, как использовать функцию DENSE_RANK() MySQL для ранжирования строк в каждом разделе набора результатов.