Oracle 순위를 매길수 있는 함수 (RANK, DENSE_RANK, ROW_NUMBER)
Back-End/Data Base 2019. 9. 26. 16:05Oracle에는 순위를 매길수 있는 여러가지 함수가 있습니다.
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 |
'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 |