레코드를 특정 column의 값을 기준으로 정렬하여 순서를 매길 수 있다. RANK() OVER 또는 ROW_NUMBER() OVER를 사용하면 된다. 간단히 아래와 같은 테이블을 생각하자.

SQL> SELECT * FROM TMP_TABLE;


USERID    |     SCORE

----------|----------

aaa       |        10

aaa       |        30

aaa       |        50

aaa       |        90

bbb       |        80

bbb       |        50

bbb       |        20

bbb       |        40

aaa       |        50


9 rows selected.


score column을 기준으로 순서를 매기고 싶다. 그러면 간단하게 다음과 같이 하면 된다.

SELECT USERID, SCORE, RANK() OVER (ORDER BY SCORE DESC) RANK

FROM TMP_TABLE;


USERID    |     SCORE|      RANK

----------|----------|----------

aaa       |        90|         1

bbb       |        80|         2

aaa       |        50|         3

aaa       |        50|         3

bbb       |        50|         3

bbb       |        40|         6

aaa       |        30|         7

bbb       |        20|         8

aaa       |        10|         9


9 rows selected.


SELECT USERID, SCORE, ROW_NUMBER() OVER (ORDER BY SCORE DESC) RANK

FROM TMP_TABLE;


USERID    |     SCORE|      RANK

----------|----------|----------

aaa       |        90|         1

bbb       |        80|         2

aaa       |        50|         3

aaa       |        50|         4

bbb       |        50|         5

bbb       |        40|         6

aaa       |        30|         7

bbb       |        20|         8

aaa       |        10|         9


9 rows selected.


위의 RANK()와 ROW_NUMBER()의 차이는 결과를 자세히 보면 알 수 있다. RANK()의 결과는 3, 4, 5번째 레코드의 점수가 50점으로 동일하기 때문에 때문에 같은 순서인 3번을 매겼다. 하지만 ROW_NUMBER()의 결과는 점수가 같더라도 레코드가 달라지면 다른 순서를 매긴다.

Posted by 사라링
BLOG main image
.. by 사라링

카테고리

사라링님의 노트 (303)
JSP (32)
J-Query (41)
디자인패턴 (1)
JAVA (24)
스트러츠 (3)
안드로이드 (11)
오라클 (45)
우분투-오라클 (1)
이클립스메뉴얼 (6)
스프링3.0 (23)
자바스크립트 (11)
HTML5.0 (17)
정보처리기사 (1)
기타(컴퓨터 관련) (1)
문제점 해결 (3)
프로젝트 (2)
AJAX (4)
하이버네이트 (3)
트러스트폼 (11)
Jeus (2)
재무관리(회계) (5)
정규식 (5)
아이바티스 (8)
취미 (2)
소프트웨어 보안 관련모음 (0)
정보보안기사 (6)
C언어 베이직 및 프로그램 (3)
보안 관련 용어 정리 (2)
넥사크로 (6)
웹스퀘어_ (0)
Total :
Today : Yesterday :