티스토리 뷰

Daylogs/DB

오라클 rownum 쿼리

ohgyun 2008. 12. 11. 14:58

보통 오라클에서 페이징을 하거나 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


조금 깔끔해졌다.

반응형
댓글
공지사항