순위함수는 결과에 순위를 부여하는 함수입니다.
종류가 다양하며 각 함수마다 처리하는 방식이 조금씩 차이가 존재합니다.
순위 함수는 전체 데이터에 순위를 부여 가능하고 PARTITION 옵션을 사용해 그룹 내 순위를 부여할 수 있습니다.
모든 행에 대해 유일한 값으로 순위를 부여합니다.
함수 실행 결과에는 같은 순위가 존재하지 않으며, 만약 같은 순위라면 정렬 순서에 따라 순위를 다르게 부여하여 반환합니다.
순위를 매기기 위해서는 정렬조건이 필요합니다.
OVER 정렬 조건
오름차순 또는 내림차순으로 데이터의 순위를 부여합니다.
PARTITION BY 옵션으로 그룹별로 순위를 매길 수 있습니다.
# 예시
위는 DATA라는 테이블입니다.
학생들의 중간고사 성적 데이터로 ENGLISH, HISTORY, MATH, SCIENCE 라는 과목별로 점수가 나와있습니다.
SELECT
field1,
ROW_NUMBER() OVER(ORDER BY science DESC) AS science_ranking,
science,
english,history, math
FROM data;
ROW_NUMBER(): 특정 정렬 기준에 따라 각 행에 고유한 번호를 매깁니다.
ORDER BY science DESC: science 점수를 기준으로 내림차순으로 정렬하여 높은 점수가 먼저 나오도록 합니다.
AS science_ranking: 순위를 나타내는 새로운 칼럼으로 science_ranking으로 순위를 매깁니다.
RANK 함수는 ROW_NUMBER와 비슷하지만 같은 순위를 처리하는 방법이 다릅니다.
같은 순위의 경우 같은 값을 부여합니다.
같은 순위를 처리한 다음 순위 값은 같은 순위를 처리한 개수를 이용하여 다음 순위를 부여합니다.
select
field1,
rank() over(order by ENGLISH DESC)AS ENGLISTH_RANK,ENGLISH,
HISTORY, MATH
from data;
ENGLISH 점수를 기준으로 내림차순으로 정렬합니다.
이 때, aron과 grace는 동일한 점수로 같은 순위를 차지하게 됩니다.
RANK 함수와 동일하지만 같은 순위 개수를 무시한다라는 차이점이 있습니다.
select
field1,
dense_rank() over(order by ENGLISH DESC)AS ENGLISTH_RANK,ENGLISH,
HISTORY, MATH
from data;
RANK 함수는 aron과 grace가 4순위로 되고, 그 다음 5순위가 아닌 6순위가 되었습니다.
DENSE_RANK 함수는 4순위 이후, 5순위가 존재합니다.
Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!