반응형
오라클에서 페이징 처리 등을 할때 로우의 순번을 매긴 뒤 정렬을 해줘야 합니다.
이때 ROW_NUMBER() 을 사용하면 쉽게 순번을 매길수 있습니다.
# 예제 코드
예제 테이블에서 단순 SELECT 쿼리문했을 때 위와 같은 로우를 보여줍니다.
그리고 저 테이블의 로우를 날짜(REGIST_DT)로 정렬하고 싶습니다.
ORDER BY를 사용하여 정렬 할 수 있겠지만 이렇게만 하면 분명 한계가 존재합니다.
페이징 처리를 해야한다고 가정해봅시다. 1, 2, .. 페이지 등이 존재할 것이고, 한 페이지에는 10개의 로우를 보여주고 로우는 날짜를 기준으로 뷰에 뿌려진다고 합시다.
만약 ORDER BY만 사용한다면 1페이지에는 문제 없이 로우값을 뿌릴수 있겠지만, 문제는 2페이지부터 입니다.
2페이지에서 11번째부터 20번째까지의 로우(1번~10번 페이지는 제외하고)를 가져와야 하는데 이는 쉽지 않습니다.
이때 바로 ROW_NUMBER()을 이용하여 조회 순번을 정해주는 것입니다.
SELECT
SEQ
, TITLE
, TO_CHAR(REGIST_DT, 'YYYY-MM-DD HH24:MI') AS REGIST_DT
, ROW_NUMBER() OVER( ORDER BY REGIST_DT DESC) AS rnum
FROM TEMP_TABLE
WHERE 1=1
# 응용 예제
SELECT
A.*
FROM
(
SELECT
BANNER_SN AS seq
, BANNER_SJ AS TITLE
, TO_CHAR(REGIST_DT, 'YYYY-MM-DD HH24:MI') AS REGIST_DT
, ROW_NUMBER() OVER( ORDER BY REGIST_DT DESC) AS rnum
FROM BANNER
) A
WHERE A.rnum > 4 AND A.rnum < 8
단순 ORDER BY를 했을 경우 위와 같이 특정 번호의 ROW를 가져오기가 상당히 번거롭습니다. 따라서 ROW_NUMBER()을 이용하여 매긴 순번에 대해 정렬 해놓으면 어느 ROW 든 가져오기가 쉽습니다.
읽어주셔서 감사합니다.
질문은 언제나 환영합니다.
"난 반드시 백엔드 왕이 될거야"
반응형
'...' 카테고리의 다른 글
[Oracle] COUNT() 집계함수 사용하기 (0) | 2021.02.01 |
---|---|
[Oracle] Listener refused the connection with the following error (0) | 2021.01.26 |
[CA] 동기(Blocking)와 비동기(Non-Blocking) (2) | 2021.01.24 |
[JS] 정규식 예제들 (0) | 2021.01.21 |
[JS] 제이쿼리 id, class, name 속성 값 가져오기 (0) | 2021.01.21 |