복붙노트

[SQL] 테이블 사용 ROWNUM의 두 번째 행을 선택

SQL

테이블 사용 ROWNUM의 두 번째 행을 선택

나는 아래의 쿼리를 시도했다 :

select empno from (
                   select empno 
                     from emp
                    order by sal desc
                  )
where rownum = 2

이 모든 레코드를 반환하지 않습니다.

언제이 쿼리를 시도

 select rownum,empno from (
                        select empno from emp order by sal desc) 

그것은 나에게이 출력을 제공합니다 :

ROWNUM  EMPNO      
1       7802        
2       7809    
3       7813    
4       7823

사람이 내 첫 번째 쿼리의 문제 무엇을 말해 줄 수 있습니까? 나는 ROWNUM 필터를 추가 할 때 왜 모든 레코드를 반환하지 않습니다?

해결법

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

    1.이해 오라클 ROWNUM에서 인용

    이해 오라클 ROWNUM에서 인용

    당신은 작업을 위해이 방법을 쿼리를 수정해야합니다 :

    select empno
    from
        (
        select empno, rownum as rn 
        from (
              select empno
              from emp
              order by sal desc
              )
        )
    where rn=2;
    

    편집 : 나는 샐 내림차순으로 주문 후 ROWNUM을 얻기 위해 쿼리를 수정했습니다

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

    2.제 질의에서, 첫 번째 행 ROWNUM = 1이므로 거부 될 것이다. 두 번째 행은 (로우 전에 거부 되었기 때문에)도 거절 ROWNUM = 1, 세 번째 행은 또한 ROWNUM = 1도 및 (가 거부되기 전에 모든 행하기 때문에) 거절 등 ... 순있을 것이다 것 결과는 모든 행이 거부된다는 점이다.

    제 질의에서, 첫 번째 행 ROWNUM = 1이므로 거부 될 것이다. 두 번째 행은 (로우 전에 거부 되었기 때문에)도 거절 ROWNUM = 1, 세 번째 행은 또한 ROWNUM = 1도 및 (가 거부되기 전에 모든 행하기 때문에) 거절 등 ... 순있을 것이다 것 결과는 모든 행이 거부된다는 점이다.

    두 번째 쿼리는 얻은 결과를 반환하지 않아야합니다. 그것은 ORDER BY 후 제대로 할당 ROWNUM을해야한다.

    모든이의 결과로,이 같은 하위 쿼리의하지 2 만 3 레벨을 사용할 필요가 :

    SELECT EMPNO, SAL FROM ( -- Make sure row is not rejected before next ROWNUM can be assigned.
        SELECT EMPNO, SAL, ROWNUM R FROM ( -- Make sure ROWNUM is assigned after ORDER BY.
            SELECT EMPNO, SAL
            FROM EMP
            ORDER BY SAL DESC
        )
    )
    WHERE R = 2
    

    결과:

    EMPNO                  SAL                    
    ---------------------- ---------------------- 
    3                      7813                   
    
  3. ==============================

    3.이 시도:

    이 시도:

    SELECT ROW_NUMBER() OVER (ORDER BY empno) AS RowNum,
           empno
    FROM   tableName
    WHERE  RowNumber = 2;
    

    소스 코드 조각 :

    SELECT last_name FROM 
          (SELECT last_name, ROW_NUMBER() OVER (ORDER BY last_name) R FROM employees)
    WHERE R BETWEEN 51 and 100
    

    참고

  4. ==============================

    4.오라클에서 ROWNUM을 사용하여 n 번째 행의 경우 :

    오라클에서 ROWNUM을 사용하여 n 번째 행의 경우 :

    select * from TEST WHERE ROWNUM<=n
    MINUS
    select * from TEST WHERE ROWNUM<=(n-1);
    

    두 번째 행의 예 :

    select * from TEST WHERE ROWNUM<=2
    MINUS
    select * from TEST WHERE ROWNUM<=1;
    
  5. ==============================

    5.(에서 EMPNO 선택                            럼으로 EMPNO, ROWNUM을 선택                            EMP에서,                            SAL DESC 의해 주문                   ) 여기서 럼 = 2;

    (에서 EMPNO 선택                            럼으로 EMPNO, ROWNUM을 선택                            EMP에서,                            SAL DESC 의해 주문                   ) 여기서 럼 = 2;

  6. ==============================

    6.

    Select * From (SELECT *,
      ROW_NUMBER() OVER(ORDER BY column_name  DESC) AS mRow
    
    FROM table_name 
    
    WHERE condition) as TT
    Where TT.mRow=2;
    
  7. ==============================

    7.오라클의 테이블에서 두 번째 행을 선택

    오라클의 테이블에서 두 번째 행을 선택

    SELECT *
    FROM (SELECT * FROM emp ORDER BY rownum DESC)
    WHERE rownum=1
    
  8. ==============================

    8.당신은 당신이 달성하려고하는 것을 달성하기 위해 RANK 또는 DENSE_RANK를 사용할 수 있습니다.

    당신은 당신이 달성하려고하는 것을 달성하기 위해 RANK 또는 DENSE_RANK를 사용할 수 있습니다.

  9. from https://stackoverflow.com/questions/9240192/selecting-the-second-row-of-a-table-using-rownum by cc-by-sa and MIT license