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

Функция Rank в SQL Server

Функция Rank в SQL Server

При работе с данными существует фундаментальная необходимость категоризировать или ранжировать различные записи. Например, вы можете ранжировать команды по их баллам, сотрудников по их зарплате и т.д.

Большинство из нас выполняет вычисления, используя функции, которые возвращают одно значение. В этой статье мы рассмотрим, как использовать функцию ранжирования SQL Server для возврата совокупного значения для определенной группы строк.

 

Функция Rank() в SQL Server: Основы

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

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

Синтаксис функции ранга следующий:

rank OVER (
        [partition BY expression],
        ORDER BY expression [ASC|DESC

 

Давайте разберем приведенный выше синтаксис.

Предложение partition by делит строки на определенные разделы, к которым применяется функция ранжирования. Например, в базе данных, содержащей данные о сотрудниках, вы можете разбить строки на основе отделов, в которых они работают.

Следующее предложение, ORDER BY, определяет порядок, в котором строки организованы в указанных разделах.

 

Функция Rank(): Практическое использование

Давайте возьмем практический пример, чтобы понять, как использовать функцию rank() в SQL Server.

Начните с создания примера таблицы, содержащей информацию о сотрудниках.

CREATE TABLE developers(
        id INT IDENTITY(1,1), NOT a NULL PRIMARY KEY,
        name VARCHAR(200) NOT NULL,
        department VARCHAR(50),
        salary money
);

Затем добавьте некоторые данные в таблицу:
INSERT INTO developers(name, department, salary)
VALUES ('AndreyEx', 'Game Developer',230000 ),
      ('Maxim', 'Mobile Developer', 111000),
           ('Alex', 'DevOps Developer', 120000),
           ('Maria', 'Mobile Developer', 1109000),
           ('Dany', 'Full-Stack Developer' 2102000),
SELECT * FROM developers;

 

У вас должна быть таблица с записями.

 

Пример 1: Order by

Используйте функцию ранга, чтобы присвоить ранги данным. Пример запроса выглядит следующим образом:

SELECT *, rank()  OVER (ORDER BY department) AS rank_number FROM developers;

 

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

Например, с ранга 7 функция переходит на ранг 10, поскольку ранги 8 и 9 присваиваются двум последовательным значениям ранга 7.

 

Пример 2: Partition By

Рассмотрим пример ниже. Он использует функцию ранга для присвоения ранга разработчикам в том же отделе.

SELECT *, rank() OVER (partition BY department ORDER BY salary DESC) AS rank_number FROM developers;

 

Вышеупомянутый запрос начинается с разделения строк в соответствии с их отделами. Затем предложение order by сортирует записи в каждом разделе по зарплате в порядке убывания.

 

Вывод

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

Exit mobile version