open:rank-over

Rank Over

레코드를 특정 column의 값을 기준으로 정렬하여 순서를 매길 수 있다.
만약 아래와 같은 테이블이 있다고 가정하자

USERID SCORE
a 10
b 30
c 50
d 90
e 80
f 50
g 20

SCORE COLUMN을 기준으로 순서를 매기고 싶다면 다음과 같이 하면된다.

<sxh sql>
SELECT USERID, SCORE, RANK() OVER(ORDER BY SCORE DESC) RANK FROM TMP_TABLE;
</sxh>

USERID SCORE RANK
d 90 1
e 80 2
c 50 3
f 50 3
b 30 4
g 20 5
a 10 6
ROW_NUMBER() 함수를 사용하면 아래와 같다

<sxh sql>
SELECT USERID, SCORE, ROWNUMBER() OVER(ORDER BY SCORE DESC) RANK FROM TMPTABLE;
</sxh>

USERID SCORE RANK
d 90 1
e 80 2
c 50 3
f 50 4
b 30 5
g 20 6
a 10 7
위의 RANK()와 ROW_NUMBER()의 차이는 결과를 자세히 보면 알 수 있다. RANK()의 결과는 3, 4번째 레코드의 점수가 50점으로 동일하기 때문에 때문에 같은 순서인 2번을 매겼다. 하지만 ROW_NUMBER()의 결과는 점수가 같더라도 레코드가 달라지면 다른 순서를 매긴다.

  • open/rank-over.txt
  • 마지막으로 수정됨: 2020/06/02 09:25
  • 저자 127.0.0.1