MYSQL 순위를 결정하는 함수, 페이징

Web Development assistant·2021년 10월 26일
0

# SQL

목록 보기
1/28

<SELECT id="중요공지 상위 리스트">
SELECT 
	T.*
FROM (
	SELECT
    	B.*
          , ROW_NUMBER() OVER(ORDER BY 중요_공지 DESC, 새글_표시_기간 DESC, 등록일시 DESC) AS RNUM
    	FROM (
    		SELECT
     	   		게시판_일련번호
      			, 채널_타입
      			,게시판_제목
               		,게시판_내용
                	,조회수
            		,공지_여부
            		,사용_여부
            		,작성_일자
           		,새글_표시_기간
            		,등록일시
            		,중요_여부
       		FROM TBL_BOARD A
       		WHERE 1=1
       		AND 채널타입 = '100' AND 삭제_여부 = 'N'
      		<include refid="criteria"></include>
  	    ) B
      ) T
      WHERE 1=1
      AND T.RNUM BETWEEN ((#{page} -1 ) * #{pageSize} + 1) AND (#{page} * #{pageSize})
      ORDER BY RNUM
</SELECT>

자세히 봐야할 것..!!
SELECT ROW_NUMBER() OVER( PARTITION BY [그룹화할 컬럼] ORDER BY 정렬할 컬럼)

[그룹내 순위를 결졍하는 함수] 오라클 8i 부터 지원.

  1. ROW_NUMBER() : 1등이 두명이여도 1,2 등으로 나눈다.
  2. RANK() : 1등이 두명이면 그 다음 순위는 3등이 된다.
  3. DENSE_RANK() : 1등이 두명이면 그 다음 순위는 2등이 된다.

이 함수를 사용하기 위해서 OVER()함수 내의 ORDER BY는 필수이다.
PARTITION BY()는 필수는 아니며, 사용시 PARTITION를 기준으로 그룹을 나누어지게 된다.순위도 별개의 그룹으로 나뉘어 각각 매겨진다.

OVER()함수란? GROUP BY, ORDER BY 서브쿼리를 개선하기 위한 함수이다.
즉, ORDER BY, GROUP BY 구문을 OVER()함수로 대체 할 수 있다.

0개의 댓글