본문으로 바로가기

Oracle 순위 뽑기

category 데이터베이스 2019. 6. 20. 14:16

만약 추천 수가 높은 3인을 뽑거나

순위를 매기거나 할 필요가 생길겁니다.

그때는 RANK()함수나 ROW_NUMBER()를 사용하면 됩니다.

현재 user라는 테이블 내 user_name과 user_like(좋아요 수)가 있다면

이를 RANK()함수를 이용하여 뽑아내려면 쿼리는

  select user_like,RANK() OVER(order by user_like desc) from jeongchan_user;

위와 같습니다.

즉 RANK()는 OVER가 뒤따라 붙는데 OVER안에 무엇을 랭크로 삼을 지 정렬 기준을 적어줍니다.

order by user_like desc는 좋아요 수를 기준으로 삼는데 내림차순으로 해서 순위를 매겨라라는 뜻입니다.

이렇게 되면 출력 결과는

1 3 4 6이 나온 것을 볼 수 있습니다.

왜 2와 5가 없냐라는 질문에 답은

같은 값에 대해서 공동 순위를 매기기 때문입니다.

즉 1이 2명이기 때문에 그 다음 2 는 없습니다.

만약에 최상위 3명을 뽑고 싶다!! 그러면 아래 쿼리처럼 하면됩니다.

select user_name,user_like from
(
    select user_name,user_like,RANK() OVER(order by user_like desc) rn
    from jeongchan_user
)
where rn<=3;

즉 inline을 이용하여 user_like를 뽑는데 내부적으로 RANK를 통하여 나오는 변수 rn을 잡아주고

rn을 where조건으로 3개 이하를 잡아주면 됩니다.

결과는 아래와 같습니다.

즉 최상위 3명만 나오는 것을 볼 수 있습니다.

 

ROW_NUMBER()는 공동순위를 매기지않고 1부터 차례대로 순위를 매깁니다.

아래는 쿼리입니다.

select user_like,ROW_NUMBER() OVER(order by user_like desc) from jeongchan_user;

즉 RANK()를 ROW_NUMBER()로 바꿔줬을 뿐입니다.

아래는 결과입니다.

즉 1부터 차례대로 순서가 매겨진 것을 볼 수 있습니다. 상위권 3개 뽑기위해서는

위와 동일합니다.

'데이터베이스' 카테고리의 다른 글

ORA-00972: identifier is too long  (0) 2019.06.28
ORACLE- select level  (0) 2019.06.22