从薪水中选择rownum,其中rownum = 3;

时间:2010-08-11 10:25:50

标签: sql oracle oracle10g

如何使用“rownum”关键字从任何表中检索第三行(我使用的是oracle-10g)

4 个答案:

答案 0 :(得分:11)

Oracle在查询生成行时按顺序将值分配给ROWNUM - 因此,获取的第一行获取ROWNUM = 1,获取的第二行获取ROWNUM = 2,获取的第三行获取ROWNUM = 3等。注意 - 对于要分配的行,ROWNUM = 3必须获取前两行。这就是您的查询不返回任何行的原因。您要求数据库提取第三行 - 但从未提取过第1行和第2行。

要演示,请尝试运行以下查询:

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

要解决您的问题,请尝试以下操作:

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

分享并享受。

答案 1 :(得分:3)

你会need to do这样的事情

select rnum,sal
  from  
( select sal, rownum rnum

    from salary 
   order by sal desc ) 
 where rnum = 3;
直到谓词阶段之后才会分配

rownum,因此rownum = 3将始终为false。使用CTE或派生表,然后您可以从外部访问rownum

答案 2 :(得分:2)

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

这是不正确的。这将始终返回'3',因为您正在选择ROW_NUMBER。

它应该是“select *”,如下所述:

select * from (select rownum as row_number, s.* from salary s) where row_number = 3;

答案 3 :(得分:-1)

rownum是薪资表中的实际列吗?如果不是,则根据您的数据库类型,可能不支持rownum。