Последнее обновление
RANK
Описание
Оконная функция RANK() возвращает ранг значений в упорядоченном наборе данных. Ранги начинаются с 1 и последовательно увеличиваются. Одинаковые значения получают одинаковый ранг, но при этом в последовательности рангов появляются пропуски. Например, если первые две строки имеют ранг 1, следующее отличающееся значение получит ранг 3 (а не 2).
Синтаксис
RANK()
Возвращаемое значение
Возвращает значение ранга типа BIGINT. Для одинаковых значений возвращается одинаковый ранг, но в последовательности появляются пропуски.
Примеры
SELECT
department,
employee_name,
salary,
RANK() OVER (
PARTITION BY department
ORDER BY salary DESC
) as salary_rank
FROM employees;
+------------+---------------+--------+-------------+
| department | employee_name | salary | salary_rank |
+------------+---------------+--------+-------------+
| Sales | Alice | 10000 | 1 |
| Sales | Bob | 10000 | 1 |
| Sales | Charlie | 8000 | 3 | -- Note this is 3, not 2
| IT | David | 12000 | 1 |
| IT | Eve | 11000 | 2 |
| IT | Frank | 11000 | 2 |
| IT | Grace | 9000 | 4 | -- Note this is 4, not 3
+------------+---------------+--------+-------------+
В этом примере данные разбиваются на разделы по отделам, а внутри каждого отдела ранжируются по зарплате. Сотрудники с одинаковыми зарплатами (например, Alice и Bob, Eve и Frank) получают одинаковый ранг, но это приводит к пропускам в последующих рангах.