select rownum from salary where rownum=3;

2020-02-07 10:47发布

How to retrieve third row from any table using "rownum" key word ( i am using oracle-10g)

4条回答
我只想做你的唯一
2楼-- · 2020-02-07 11:20

Oracle assigns values to ROWNUM sequentially as rows are produced by the query - thus, the first row fetched gets ROWNUM=1, the second row fetched gets ROWNUM=2, the third row fetched gets ROWNUM=3, etc. Notice - for a row to be assigned ROWNUM=3 two preceding rows MUST be fetched. And this is why your query returns no rows. You're asking the database for the third row fetched - but rows 1 and 2 have never been fetched.

To demonstrate, try running the following queries:

SELECT S.* FROM SALARY S;          -- Should return all rows
SELECT ROWNUM, S.* FROM SALARY S;  -- Should return all rows with ROWNUM prepended
SELECT ROWNUM, S.* FROM SALARY WHERE ROWNUM=3;  -- Should return no rows

To work around your problem, try the following:

SELECT ROW_NUMBER FROM
  (SELECT ROWNUM AS ROW_NUMBER, S.* FROM SALARY S)
  WHERE ROW_NUMBER = 3;

Share and enjoy.

查看更多
何必那么认真
3楼-- · 2020-02-07 11:27

You would need to do something like this

select rnum,sal
  from  
( select sal, rownum rnum

    from salary 
   order by sal desc ) 
 where rnum = 3;

rownum is not assigned until after the predicate phase so rownum = 3 will always be false. Use a CTE or derived table then you can access the rownum from outside it.

查看更多
虎瘦雄心在
4楼-- · 2020-02-07 11:27
SELECT ROW_NUMBER FROM   (SELECT ROWNUM AS ROW_NUMBER, S.* FROM SALARY S)   WHERE ROW_NUMBER = 3; 

This is incorrect. This will always return '3', because you are selecting ROW_NUMBER.

It should instead be "select *", as mentioned below:

select * from (select rownum as row_number, s.* from salary s) where row_number = 3;
查看更多
迷人小祖宗
5楼-- · 2020-02-07 11:40

Is rownum an actual column in your salary table? If not, depending on your DB type, rownum is likely not supported.

查看更多
登录 后发表回答