При работе с данными существует фундаментальная необходимость категоризировать или ранжировать различные записи. Например, вы можете ранжировать команды по их баллам, сотрудников по их зарплате и т.д.
Большинство из нас выполняет вычисления, используя функции, которые возвращают одно значение. В этой статье мы рассмотрим, как использовать функцию ранжирования 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, что позволяет вам разделять и ранжировать строки.