정렬 함수
예제코드
DROP TABLE BAE; CREATE TABLE BAE(TEAM VARCHAR2(2), VAL VARCHAR2(2)); ALTER TABLE BAE ADD PRIMARY KEY(TEAM,VAL); INSERT INTO BAE (TEAM,VAL) VALUES ('TM', 'A'); INSERT INTO BAE (TEAM,VAL) VALUES ('TM', 'B'); INSERT INTO BAE (TEAM,VAL) VALUES ('TM', 'C'); INSERT INTO BAE (TEAM,VAL) VALUES ('DT', 'D'); INSERT INTO BAE (TEAM,VAL) VALUES ('DT', 'E'); INSERT INTO BAE (TEAM,VAL) VALUES ('DT', 'F'); INSERT INTO BAE (TEAM,VAL) VALUES ('HS', 'A'); INSERT INTO BAE (TEAM,VAL) VALUES ('HS', 'E'); INSERT INTO BAE (TEAM,VAL) VALUES ('HS', 'F');
TEAM으로 구분된 데이터들을 어떻게 RANK 시키는지 확인 해보자.
위 예제 코드를 입력 한 후,
위 예제 코드를 입력 한 후,
1
SELECT 쿼리를 실행
SELECT * FROM BAE;
(결과)

2
이 테이블에 RANK() OVER를 이용하여 RANKING 처리
SELECT TEAM , VAL , RANK() OVER(ORDER BY VAL) AS RNK FROM BAE;
(결과)

팀과 상관없이 ORDER BY VAL 값 대로 정렬되어 RANK 됨. 물론 같은 값은 공동 순위.
3
팀별 RANK를 매겨보고 싶을 경우엔 PARTITION BY 구문을 추가
SELECT TEAM , VAL , RANK() OVER(PARTITION BY TEAM ORDER BY VAL) AS RNK FROM BAE;
(결과)

팀별로 PARTITION(분할) 되어 ORDER BY VAL 된대로 순위가 매겨짐
Notice. 공동 순위를 제외하기위해선 RANK() 함수대신 ROW_NUMBER() (선호) 혹은 DENSE_RANK() 를 사용