Мы познаем человека не по тому, что он знает, а по тому, чему он радуется (А. Бергсон).

Функция DENSE_RANK в MySQL

2 мин для чтения
FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (3 оценок, среднее: 5,00 из 5)
Загрузка...
1 октября 2019
MySQL. Математические функции
Описание: в этой статье вы узнаете о функции DENSE_RANK() в MySQL и о том, как ее применять, чтобы найти ранг строки в разделе или наборе результатов.

 

Введение в функции DENSE_RANK в MySQL

DENSE_RANK() является функция окна, которая присваивает ранг каждой строки в пределах раздела или результирующего набора без пробелов в рейтинге значений.

Ранг строки увеличивается на единицу из числа различных значений ранга, которые идут перед строкой.

Синтаксис функции DENSE_RANK() следующий:

DENSE_RANK() OVER (
PARTITION BY <expression>[{,<expression>...}]
ORDER BY <expression> [ASC|DESC], [{,<expression>...}]
)

 

В этом синтаксисе:

  • Во-первых, предложение PARTITION BY делит наборы результатов, созданные этим предложение FROM, на разделы. Функция DENSE_RANK() применяется к каждому разделу.
  • Во-вторых, предложение ORDER BY  определяет порядок строк в каждом разделе, в котором работает функция DENSE_RANK().

Если в разделе есть две или более строк с одинаковым значением ранга, каждой из этих строк будет присвоен одинаковый ранг.

В отличие от функции 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;

 

В этом примере:

  • Во-первых, в предложении PARTITION BY разделены результирующие наборы на разделы с использованием финансового года.
  • Во-вторых, в предложении ORDER BY указан порядок продаж сотрудников по продажам в порядке убывания.
  • В-третьих, функция DENSE_RANK() применяется к каждому разделу с порядком строк, указанным в предложении ORDER BY.

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Просмотров: 365

Если статья понравилась, то поделитесь ей в социальных сетях:

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close