오라클 rownum 쿼리

보통 오라클에서 페이징을 하거나 top n 을 뽑을 때에 ROWNUM을 사용한다.
헌데,

SELECT *
FROM (
    (SELECT ROWNUM AS rnum,
    FROM (
        SELECT *
        FROM tbl
        WHERE ~~
        ORDER BY regdate DESC) t.*
    WHERE ROWNUM <= 100)
WHERE rnum > 80


과 같은 식으로 감싸줘야 한다.
매우 번거롭다.


이걸 ROW_NUMBER() OVER 구문을 통해 아래와 같이 변경할 수 있다.

SELECT *
FROM (
    (SELECT t.*, ROW_NUMBER OVER (ORDER BY regdate DESC) rnum
    FROM tbl)
WHERE rnum BETWEEN 80 AND 100


조금 깔끔해졌다.

저작자 표시 비영리 변경 금지
신고