1. ROW_NUMBER()
중복 허용없이 무조건 순위를 나눈다
SELECT departmentId
, name
, salary
, ROW_NUMBER() OVER (PARTITION BY departmentId ORDER BY salary DESC) AS salary_rank
FROM employee
출력 결과
departmentid별로 salary가 내림차순으로 ROW_NUMBER를 정하면 다음과 같다.
> departmentid 1이고 salary가 9000으로 가장 큰 Max가 1위
> departmentid 1이고 salary가 8500으로 두 번째로 큰 Joe, Randy가 있는데
동일한 값이라도 고유한 순위를 부여하므로 Joe가 2위, Randy가 3위
> departmentid 1이고 salary가 7000으로 세 번째로 큰 Will이 4위
> departmentid 1이고 salary가 6900으로 네 번째로 큰 Janet이 5위
2. DENSE_RANK()
동일한 점수는 같은 순위를 매긴다
공동 2위 다음은 3위이다
SELECT departmentId
, name
, salary
, DENSE_RANK() OVER (PARTITION BY departmentId ORDER BY salary DESC) AS salary_rank
FROM employee
출력 결과
departmentid별로 salary가 내림차순으로 DENSE_RANK를 정하면 다음과 같다.
> departmentid 1이고 salary가 9000으로 가장 큰 Max가 1위
> departmentid 1이고 salary가 8500으로 두 번째로 큰 Joe, Randy가 공동 2위
> departmentid 1이고 salary가 7000으로 세 번째로 큰 Will이 3위
> departmentid 1이고 salary가 6900으로 네 번째로 큰 Janet이 4위
3. RANK()
동일한 점수는 같은 순위를 매긴다
공동 2위 다음은 4위이다
SELECT departmentId
, name
, salary
, RANK() OVER (PARTITION BY departmentId ORDER BY salary DESC) AS salary_rank
FROM employee
출력 결과
departmentid별로 salary가 내림차순으로 RANK를 정하면 다음과 같다.
> departmentid 1이고 salary가 9000으로 가장 큰 Max가 1위
> departmentid 1이고 salary가 8500으로 두 번째로 큰 Joe, Randy가 공동 2위
> departmentid 1이고 salary가 7000으로 세 번째로 큰 Will이 4위
> departmentid 1이고 salary가 6900으로 네 번째로 큰 Janet이 5위
'MYSQL' 카테고리의 다른 글
시간 더하기, 빼기 (DATE_ADD, DATE_SUB) (0) | 2023.05.28 |
---|---|
날짜 데이터에서 일부만 추출하기(YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, DATE_FORMAT, DATE) (0) | 2023.05.28 |
IF, CASE WHEN / THEN (0) | 2023.05.23 |
OUTER JOIN (LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN) (0) | 2023.05.23 |
UNION, UNION ALL (0) | 2023.05.23 |