Функция SQL DENSE_RANK()

Funkcia Sql Dense Rank



Оконные функции являются важнейшей функцией SQL и играют фундаментальную роль в сложных вычислениях с данными и операциях в базах данных SQL. Одной из функций оконных функций SQL является Densent_rank().

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

В этом уроке мы рассмотрим, как работает эта функция, ее синтаксис и как мы можем использовать ее в базе данных.







Как это работает

Начнем с объяснения того, как работает эта функция. Следует помнить, что функция является высокоуровневой, и мы не можем объяснить ее реализацию.



Функция работает, присваивая ранг каждой строке в наборе результатов, начиная с ранга 1 и увеличивая его на 1 для каждого уникального значения в столбцах.



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





Как мы уже упоминали, функция не оставляет пробелов в случае повторяющихся значений, что отличает ее от функции Rank().

Функция Densent_rank() обычно используется для выполнения операций ранжирования. Например, мы можем использовать его для поиска N верхних записей и т. д.



Синтаксис функции:

Ниже описан синтаксис функции Density_rank():

DENSE_RANK() НАД (

[РАЗДЕЛ ПО выражению_раздела, ... ]

ЗАКАЗ ПО выражению_сортировки [ASC | ДЕСК], ...

)

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

  1. Начнем с самой функции Densent_rank().
  2. Предложение OVER сигнализирует о начале спецификации оконной функции. Это определяет, как ранжирование применяется в наборе результатов.
  3. PARTITION BY выражение_раздела — это необязательное предложение, которое позволяет нам разделить результирующий набор на группы или разделы на основе одного или нескольких столбцов. Рейтинг применяется отдельно к каждому разделу с сбросом ранга в новом разделе.
  4. Выражение sort_expression ORDER BY определяет порядок, в котором мы хотим сортировать данные в результирующих разделах.

Образец данных

Чтобы продемонстрировать, как использовать функцию Densent_rank(), давайте начнем с таблицы с примером данных. В нашем случае мы используем примерную таблицу «заказов» следующим образом:

Пример 1: Использование функции Dense_Rank()

Мы можем использовать функцию Densent_rank() для ранжирования полученных ордеров на основе цены. Рассмотрим следующий пример запроса:

ВЫБИРАТЬ

номер заказа,

имя_пользователя_клиента,

продукт_куплен,

DENSE_RANK() НАД (

ЗАКАЗ К

цена ДИСК

) цена_ранг

ОТ

заказы о;

В данном примере мы используем функцию Densent_rank() для ранжирования данных на основе цены ордеров. Мы опускаем предложение PARTITION BY, поскольку мы не группируем данные.

Полученный результат выглядит следующим образом:

Пример 2: РАЗДЕЛЕНИЕ ПО

Мы также можем добавить предложение PARTITION BY, чтобы сгруппировать данные по различным сегментам, например, на основе приобретенного продукта.

Пример запроса выглядит следующим образом:

ВЫБИРАТЬ

номер заказа,

имя_пользователя_клиента,

продукт_куплен,

DENSE_RANK() НАД (

раздел по product_purchased

ЗАКАЗ К

цена ДИСК

) цена_ранг

ОТ

заказы о;

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

Заключение

В этом посте мы изучили основы использования и работы с оконной функцией Densent_rank() в SQL для присвоения ранга значениям на основе определенных столбцов.