Mastering Dense Rank SQL: The Ultimate Guide to Efficiently Ranking Your Data
DENSE_RANK в SQL является оконной функцией, которая присваивает плотные ранги значениям внутри каждой группы.
Давайте представим, что у нас есть таблица "Employees" со следующей структурой и данными:
| ID | Name | Department | Salary |
-----------------------------------------------
| 1 | John | IT | 5000 |
| 2 | Jane | HR | 6000 |
| 3 | Mike | IT | 4500 |
| 4 | Sarah | Finance | 5500 |
| 5 | James | HR | 6500 |
Теперь мы хотим получить плотные ранги для каждого отдела на основе зарплаты. То есть, для каждого отдела мы хотим получить ранги, где зарплата имеет наименьший ранг среди всех сотрудников в этом отделе.
Мы можем использовать функцию DENSE_RANK следующим образом:
sql
SELECT
ID, Name, Department, Salary,
DENSE_RANK() OVER (PARTITION BY Department ORDER BY Salary ASC) AS Dense_Rank
FROM
Employees;
Результат будет следующим:
| ID | Name | Department | Salary | Dense_Rank |
-----------------------------------------------------------
| 1 | John | IT | 5000 | 1 |
| 3 | Mike | IT | 4500 | 2 |
| 4 | Sarah | Finance | 5500 | 1 |
| 2 | Jane | HR | 6000 | 1 |
| 5 | James | HR | 6500 | 2 |
В данном примере, мы использовали PARTITION BY, чтобы разделить данные по отделам, а затем сортировали их по зарплате в порядке возрастания. DENSE_RANK присваивает плотные ранги сотрудникам внутри каждого отдела на основе их заработной платы.