• Home
  • About Me
  • Dev
    • DevNote
    • Server
  • Review
  • Life
  • FTP

정렬 함수

Published by baedev at 2014년 11월 10일
  조회 881

예제코드

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;
(결과)
SELECT-RANK-PARTITION-BY
팀별로 PARTITION(분할) 되어 ORDER BY VAL 된대로 순위가 매겨짐
Notice. 공동 순위를 제외하기위해선 RANK() 함수대신 ROW_NUMBER() (선호) 혹은 DENSE_RANK() 를 사용
 
baedev
baedev

댓글 남기기 댓글 취소

로그인을 해야 댓글을 남길 수 있습니다.

검색

© BaeDev. All Rights Reserved.