콘텐츠로 이동

값 그룹 내에서 순위에 건너뜀 없이 값의 순위를 반환합니다.

순위 값은 1에서 시작하여 순차적으로 계속됩니다.

두 값이 같으면 순위도 같습니다.

func.dense_rank().over(partition_by=[<columns>], order_by=[<columns>])
table.department, func.sum(salary), func.dense_rank().over(order_by=func.sum(table.salary).desc()).alias('dense_rank')
| department | total_salary | dense_rank |
|------------|--------------|------------|
| IT | 172000 | 1 |
| HR | 160000 | 2 |
| Sales | 77000 | 3 |
DENSE_RANK() OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ ASC | DESC ] [ <window_frame> ] )

테이블 만들기

CREATE TABLE employees (
employee_id INT,
first_name VARCHAR,
last_name VARCHAR,
department VARCHAR,
salary INT
);

데이터 삽입

INSERT INTO employees (employee_id, first_name, last_name, department, salary) VALUES
(1, 'John', 'Doe', 'IT', 90000),
(2, 'Jane', 'Smith', 'HR', 85000),
(3, 'Mike', 'Johnson', 'IT', 82000),
(4, 'Sara', 'Williams', 'Sales', 77000),
(5, 'Tom', 'Brown', 'HR', 75000);

DENSE_RANK를 사용하여 부서별 총 급여 계산

SELECT
department,
SUM(salary) AS total_salary,
DENSE_RANK() OVER (ORDER BY SUM(salary) DESC) AS dense_rank
FROM
employees
GROUP BY
department;

결과:

department total_salary dense_rank
IT 172000 1
HR 160000 2
Sales 77000 3