Ранжирование данных с помощью функции RANK()
Функция RANK()
в SQL используется для присвоения рангов строкам в пределах заданного окна, основываясь на значениях одного или нескольких столбцов. Она предназначена для ситуаций, когда нужно упорядочить данные и учесть, что строки с одинаковыми значениями получают одинаковый ранг.
Принцип работы функции RANK()
RANK()
Ранг присваивается: Функция
RANK()
назначает ранги строкам в порядке их значений. Если несколько строк имеют одинаковые значения, они получают одинаковый ранг.Пропуск рангов: Если несколько строк имеют одинаковые значения, они получают одинаковый ранг, а следующий ранг пропускается. Это означает, что ранги могут быть не последовательными.
Синтаксис функции RANK()
RANK()
PARTITION BY partition_column
: (Опционально) Разделяет строки на группы. Если не указано, функция применяется ко всему набору данных.ORDER BY order_column
: Определяет порядок, в котором будут присвоены ранги.
Примеры использования функции RANK()
RANK()
Пример 1: Ранжирование сотрудников по зарплате в пределах каждого отдела
Рассмотрим таблицу employees
с полями employee_id
, department
и salary
, и мы хотим присвоить ранги сотрудникам по зарплате внутри каждого отдела.
PARTITION BY department
: Делит данные на группы по отделам.ORDER BY salary DESC
: Упорядочивает сотрудников по зарплате в порядке убывания.
Результат: В каждом отделе сотрудники будут упорядочены по зарплате, и те, кто имеют одинаковую зарплату, получат одинаковый ранг. Например, если два сотрудника имеют самую высокую зарплату, они оба получат ранг 1, а следующий ранг будет 3.
Пример 2: Ранжирование студентов по баллам на экзамене
Рассмотрим таблицу students
с полями student_id
, exam_date
и score
, и мы хотим присвоить ранги студентам по баллам на экзамене для каждого экзамена.
PARTITION BY exam_date
: Делит данные на группы по дате экзамена.ORDER BY score DESC
: Упорядочивает студентов по баллам в порядке убывания.
Результат: Студенты будут ранжированы по их баллам на каждом экзамене. Если два студента набрали одинаковое количество баллов, они будут иметь одинаковый ранг, а следующий ранг будет пропущен.
Пример 3: Ранжирование продаж по кварталам
Рассмотрим таблицу sales
с полями sale_id
, quarter
и amount
, и мы хотим присвоить ранги продаж по сумме продаж внутри каждого квартала.
PARTITION BY quarter
: Делит данные на группы по кварталам.ORDER BY amount DESC
: Упорядочивает продажи по сумме в порядке убывания.
Результат: Продажи будут ранжированы по сумме продаж в пределах каждого квартала. Если несколько продаж имеют одинаковую сумму, они будут иметь одинаковый ранг.
Заключение
Функция RANK()
полезна для ранжирования данных в пределах групп и учета ситуаций, когда строки имеют одинаковые значения. Она помогает выявлять позиции в упорядоченных наборах данных и может быть использована для создания отчетов, анализа и принятия решений.
Last updated