반응형
출처 : http://entireboy.egloos.com/4433510
레코드를 특정 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()의 결과는 점수가 같더라도 레코드가 달라지면 다른 순서를 매긴다.
반응형
'프로그램 관련 > oracle' 카테고리의 다른 글
oracle union all 입니다 (0) | 2018.08.22 |
---|---|
오라클 권한부여/권한취소 (0) | 2018.08.14 |
oracle 과거데이터 조회하기 (0) | 2018.08.10 |
oracle concat (0) | 2018.08.02 |
oracle GROUP BY 절과 HAVING 절 (0) | 2018.07.24 |