만약 추천 수가 높은 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 |