ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Функция DENSE_RANK в MySQL

MySQL. Математические функции

Описание: в этой статье вы узнаете о функции DENSE_RANK() в MySQL и о том, как ее применять, чтобы найти ранг строки в разделе или наборе результатов.

 

Введение в функции 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;

 

 

Пример функции DENSE_RANK() в MySQL

Для демонстрации мы будем использовать таблицу 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 для ранжирования строк в каждом разделе набора результатов.

Exit mobile version