Поиск по сайту:

Общеизвестно, что четверть часика больше, чем четверть часа (Г. Лихтенберг).

Функция Rank в SQL Server

2 мин для чтения
FavoriteLoadingДобавить в избранное
20 января 2022
Функция 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;

 

Читать  Привилегия файла MySQL

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

 

Пример 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, что позволяет вам разделять и ранжировать строки.

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

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:
5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Читайте также

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x

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

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

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

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

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

close
galka

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

close