programing

SQL ROWNUM 특정 범위 사이의 행을 반환하는 방법

kakaobank 2023. 3. 18. 08:47
반응형

SQL ROWNUM 특정 범위 사이의 행을 반환하는 방법

특정 범위를 반환하려면 어떻게 해야 합니까?ROWNUM가치관?

다음을 시도하고 있습니다.

select * from maps006 where rownum >49 and rownum <101

그러면 일치하는 행만 반환됩니다.<교환입니다.

 SELECT * from
 (
 select m.*, rownum r
 from maps006 m
 )
 where r > 49 and r < 101
SELECT  *
FROM    (
        SELECT  q.*, rownum rn
        FROM    (
                SELECT  *
                FROM    maps006
                ORDER BY
                        id
                ) q
        )
WHERE   rn BETWEEN 50 AND 100

이중 중첩 뷰에 주목하십시오. ROWNUM이전에 평가됩니다.ORDER BY올바른 번호부여에 필요합니다.

생략하면ORDER BY조항, 일관된 질서를 얻을 수 없습니다.

오래된 질문인 것은 알지만, 최신 버전신기능을 언급하는 것이 도움이 됩니다.

Oracle 12c 이후로는 새로운 Top-n제한 기능을 사용할 수 있습니다.서브쿼리를 쓸 필요도 없고 ROWNUM에 의존할 필요도 없습니다.

예를 들어, 다음 쿼리는 직원 급여가 4위부터 7위까지 오름차순으로 반환됩니다.

SQL> SELECT empno, sal
  2  FROM   emp
  3  ORDER BY sal
  4  OFFSET 4 ROWS FETCH NEXT 4 ROWS ONLY;

     EMPNO        SAL
---------- ----------
      7654       1250
      7934       1300
      7844       1500
      7499       1600

SQL>

이에 대한 해결책을 찾던 중 해결책을 설명하는 이 훌륭한 기사를 발견했습니다. 관련 발췌

내가 가장 좋아하는 ROWNUM 사용법은 페이지 번호부여이다.이 경우 ROWNUM을 사용하여 결과 세트의 N ~ M 행을 가져옵니다.일반적인 형식은 다음과 같습니다.

select * enter code here
  from ( select /*+ FIRST_ROWS(n) */ 
  a.*, ROWNUM rnum 
      from ( your_query_goes_here, 
      with order by ) a 
      where ROWNUM <= 
      :MAX_ROW_TO_FETCH ) 
where rnum  >= :MIN_ROW_TO_FETCH;

다음으로 실제 예를 제시하겠습니다(행 148, 149 및 150을 취득합니다).

select *
    from
  (select a.*, rownum rnum
     from
  (select id, data
     from t
   order by id, rowid) a
   where rownum <= 150
  )
   where rnum >= 148;
SELECT * FROM
(SELECT ROW_NUMBER() OVER(ORDER BY Id) AS RowNum, * FROM maps006) AS DerivedTable
WHERE RowNum BETWEEN 49 AND 101

절과 함께 CTE를 사용할 수도 있습니다.

WITH maps AS (Select ROW_NUMBER() OVER (ORDER BY Id) AS rownum,* 
from maps006 )

SELECT rownum, * FROM maps  WHERE rownum >49 and rownum <101  
select * 
from emp 
where rownum <= &upperlimit 
minus 
select * 
from emp 
where rownum <= &lower limit ;

언급URL : https://stackoverflow.com/questions/4552769/sql-rownum-how-to-return-rows-between-a-specific-range

반응형