복붙노트

[SQL] ">"로 ROWNUM 함수의 사용 오라클 로그인 [중복]

SQL

">"로 ROWNUM 함수의 사용 오라클 로그인 [중복]

나는 "(ROWNUM> 3)"ROWNUM 함수 i_e에 의해 3보다 큰 행 수를 선택합니다 예를 들어이 25 행은 내가 ROWNUM 함수에 의해 마지막 22 개 행을 검색하십시오. 하지만 난을 쓸 때

select * from test_table where rownum>3;

그것은 어떤 행을 검색합니다. 하나의 도움이 내게는이 문제를 해결하기 위해 수 있습니다. 사전에 감사합니다

해결법

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

    1.RDBMS에는 첫 번째 또는 마지막 행이 없습니다. 당신이 "RAWS"실제로 설정 (설정)를 호출 무엇, 그들은 주문 여부를 할 수 있습니다. ROWNUM은 당신이 ROWNUM 호출하기 전에 쿼리를 수행해야합니다 세트 데이터 (행)의 당신의 세트를 주문, 계산 된 후에 만 ​​의미가 있습니다, 그냥 결과 세트를 열거 함수, 당신은 DB를 알려야합니다 순서에 대한 어떤 수단 특히 select 문이다.

    RDBMS에는 첫 번째 또는 마지막 행이 없습니다. 당신이 "RAWS"실제로 설정 (설정)를 호출 무엇, 그들은 주문 여부를 할 수 있습니다. ROWNUM은 당신이 ROWNUM 호출하기 전에 쿼리를 수행해야합니다 세트 데이터 (행)의 당신의 세트를 주문, 계산 된 후에 만 ​​의미가 있습니다, 그냥 결과 세트를 열거 함수, 당신은 DB를 알려야합니다 순서에 대한 어떤 수단 특히 select 문이다.

  2. ==============================

    2.첫 번째 행 1의 ROWNUM을 가정하고 절은 ROWNUM> 3 당신의 WHERE 다음이 1> 3 줄이고 있기 때문에 행이 삭제되어 있기 때문에 작동하지 않습니다. 후속 행이 다음 1의 ROWNUM에 대해 테스트됩니다 테스트를 다시 실패하고 폐기, (이전 행은 행 번호를 필요로하지 않습니다 이제 더 이상 출력하고 있기 때문에). 반복, 광고 nauseum 모든 행은 WHERE 절 필터를 실패하고 삭제됩니다.

    첫 번째 행 1의 ROWNUM을 가정하고 절은 ROWNUM> 3 당신의 WHERE 다음이 1> 3 줄이고 있기 때문에 행이 삭제되어 있기 때문에 작동하지 않습니다. 후속 행이 다음 1의 ROWNUM에 대해 테스트됩니다 테스트를 다시 실패하고 폐기, (이전 행은 행 번호를 필요로하지 않습니다 이제 더 이상 출력하고 있기 때문에). 반복, 광고 nauseum 모든 행은 WHERE 절 필터를 실패하고 삭제됩니다.

    그런 다음 행에게 ROWNUM을 할당하면이 작업을 수행해야 할 경우 하위 쿼리입니다 :

    SELECT *                  -- Finally, in the outer query, filter on the assigned ROWNUM
    FROM   (
      SELECT t.*,             -- First, in the inner sub-query, apply a ROWNUM
             ROWNUM AS rn
      FROM   test_table t
    )
    WHERE  rn > 3;
    

    또는,이 번호 전에 결과를 정렬하려면 :

    SELECT *                  -- Finally, in the outer query, filter on the assigned ROWNUM
    FROM   (
      SELECT t.*,             -- Second, in the next level sub-query, apply a ROWNUM
             ROWNUM AS rn
      FROM   (
        SELECT *              -- First, in the inner-most sub-query, apply an order
        FROM   test_table
        ORDER BY some_column
      ) t
    )
    WHERE  rn > 3;
    
  3. ==============================

    3.

    select * from (select rownum as rn, t.* from test_table t) where rn > 3
    

    더 많은 샘플이 문서를 참조하십시오 최고-N과 페이지 네이션 쿼리에서 톰 카이트에

  4. from https://stackoverflow.com/questions/43339561/using-of-rownum-function-with-sign-in-oracle by cc-by-sa and MIT license