Oracle 순위를 매길수 있는 함수 (RANK, DENSE_RANK, ROW_NUMBER)

Back-End/Data Base 2019. 9. 26. 16:05
728x90
반응형

Oracle에는 순위를 매길수 있는 여러가지 함수가 있습니다.



  RANK : 동일한 값이면 중복 순위를 부여하고, 다음 순위는 해당 개수만큼 건너뛰고 반환한다.


  DENSE_RANK : 동일한 값이면 중복 순위를 부여하고, 다음 순위는 중복 순위와 상관없이 순차적으로 반환


  ROW_NUMBER : 중복 관계없이 순차적으로 순위를 반환, 또한 이 함수는 조건을 여러개 설정해서 정렬할 수 있다.

                         

                         EX) 추천수대로 게시글을 정렬할때 순위가 중복될 수 있으므로, 추천수가 같다면 조회수 순으로 다시한번 정렬할 수 있다.




RANK 함수 문법


SELECT 컬럼1, 컬럼2, 컬럼3, RANK() OVER (ORDER BY 기준_컬럼 DESC) AS 별명 FROM 테이블;




DENSE_RANK 함수 문법


SELECT 컬럼1, 컬럼2, 컬럼3, DENSE_RANK() OVER (ORDER BY 기준_컬럼 DESC) AS 별명 FROM 테이블;




ENSE_RANK 함수 문법


SELECT 컬럼1, 컬럼2, 컬럼3, ROW_NUMBER() OVER (ORDER BY 기준_컬럼 DESC) AS RANK FROM 테이블;





ENSE_RANK 예시


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!-- 베스트게시물 게시판에 출력되는 목록 mapper -->
<!-- 순위를 출력할때 먼저 추천수 기준으로 순위를 매기고 추천수가 동일한 경우에는 조회수를 기준으로 순위를 다시 매겨서 중복이 없도록 출력한다. -->

<select id="bestlistAll" resultType="com.example.hansub_project.model.board.dto.MemberBoardDTO">
 
select member_bno, 
user_id, 
reg_date, 
viewcnt, 
title, 
rcnt, 
content, 
recommend,
row_number() over (order by recommend desc, viewcnt desc) as rk
from 
    (
    select recommend, member_bno, user_id, reg_date, viewcnt, title, rcnt, content
    from member_board
    order by recommend desc
)

<!--부등호가 있을때는 아래 문장처럼 <![CDATA[]]>로 묶어 주어야 한다 -->

<![CDATA[where rownum <= 10]]>
        
</select>
cs





728x90
반응형

'Back-End > Data Base' 카테고리의 다른 글

TABLE Join  (0) 2020.01.26
Join 이란?  (0) 2020.01.23
상위 n개의 데이터만 뽑고 싶을 경우  (0) 2019.09.25
오라클에서 조건문 사용  (0) 2019.09.04
데이터베이스 sql export 및 import  (0) 2019.09.03
: