Selecting the second row of a table using rownum

后端 未结 9 1443
栀梦
栀梦 2020-11-28 14:07

I have tried the below query:

select empno from (
                   select empno 
                     from emp
                    order by sal desc
               


        
相关标签:
9条回答
  • 2020-11-28 15:00

    In the first query, the first row will have ROWNUM = 1 so will be rejected. The second row will also have ROWNUM = 1 (because the row before was rejected) and also be rejected, the third row will also have ROWNUM = 1 (because all rows before it were rejected) and also be rejected etc... The net result is that all rows are rejected.

    The second query should not return the result you got. It should correctly assign ROWNUM after ORDER BY.

    As a consequence of all this, you need to use not 2 but 3 levels of subqueries, like this:

    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
    

    The result:

    EMPNO                  SAL                    
    ---------------------- ---------------------- 
    3                      7813                   
    
    0 讨论(0)
  • 2020-11-28 15:01

    For nth row using rownum in oracle:

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

    Example for second row :

    select * from TEST WHERE ROWNUM<=2
    MINUS
    select * from TEST WHERE ROWNUM<=1;
    
    0 讨论(0)
  • 2020-11-28 15:04

    try this:

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

    Snippet From Source:

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

    REFERENCE

    0 讨论(0)
提交回复
热议问题