복붙노트

[SQL] SQL ROWNUM 어떻게 특정 범위 사이에 행을 반환합니다

SQL

SQL ROWNUM 어떻게 특정 범위 사이에 행을 반환합니다

어떻게 ROWNUM 값의 특정 범위를 반환 할 수 있습니다?

나는 다음을 시도하고있다 :

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

이것은 <연산자 일치 행만을 반환한다.

해결법

  1. ==============================

    1.

     SELECT * from
     (
     select m.*, rownum r
     from maps006 m
     )
     where r > 49 and r < 101
    
  2. ==============================

    2.

    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 절을 생략하면 일관된 주문을받지 않습니다.

  3. ==============================

    3.나는 그러나, 최신 버전의 새로운 기능을 언급하는 데 유용합니다,이 오래된 질문 알아요.

    나는 그러나, 최신 버전의 새로운 기능을 언급하는 데 유용합니다,이 오래된 질문 알아요.

    이후 오라클 12C에서, 당신은 새로운 최고-N 행 제한 기능을 사용할 수 있습니다. 필요가 하위 쿼리, ROWNUM에 대한 종속성을 쓸 수 있습니다.

    예를 들어, 쿼리 아래의 오름차순으로 7 가장 높은 급여까지 4 가장 높은 사이의 직원을 반환합니다 :

    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>
    
  4. ==============================

    4.나는 이것에 대한 해결책을 찾고,이 위대한 발견 솔루션을 설명하는 기사 관련 발췌

    나는 이것에 대한 해결책을 찾고,이 위대한 발견 솔루션을 설명하는 기사 관련 발췌

    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;
    
  5. ==============================

    5.

    SELECT * FROM
    (SELECT ROW_NUMBER() OVER(ORDER BY Id) AS RowNum, * FROM maps006) AS DerivedTable
    WHERE RowNum BETWEEN 49 AND 101
    
  6. ==============================

    6.또한 절 CTE를 사용하여 수행 할 수 있습니다.

    또한 절 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  
    
  7. ==============================

    7.

    select * 
    from emp 
    where rownum <= &upperlimit 
    minus 
    select * 
    from emp 
    where rownum <= &lower limit ;
    
  8. from https://stackoverflow.com/questions/4552769/sql-rownum-how-to-return-rows-between-a-specific-range by cc-by-sa and MIT license