从工资中选择rownum,其中rownum = 3;

Posted

技术标签:

【中文标题】从工资中选择rownum,其中rownum = 3;【英文标题】:select rownum from salary where rownum=3; 【发布时间】:2010-08-11 10:25:50 【问题描述】:

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

【问题讨论】:

@Jagan,你的 RDBMS 是什么?请提供'Select s.*, rownum from Salary s'的结果。 在不知道您的架构或(至少)一些发生问题的示例数据的情况下,我们如何猜测您的问题是什么? -1 如果查询(即您的标题)是正确的,那么答案是包含 3 的单行!! 更多标签会更好。我假设您使用的是 Oracle。 @Mitch Wheat - 您的评论是合乎逻辑和合理的,但不是您在 Oracle 中可以找到的。 Oracle 在查询“吐出”行时分配 ROWNUM 值(实际上,在评估 WHERE 子句之后) - 因此,在 ROWNUM=1 和 ROWNUM=2 的行之前不会有 ROWNUM=3 的行产生。这是一种追尾的事情——查询正在寻找 ROWNUM=3,但唯一可以生成的行(因为它显然是在寻找单行)将有 ROWNUM=1——因此,没有结果完全生产。 【参考方案1】:

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;

分享和享受。

【讨论】:

【参考方案2】:

你会 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

【讨论】:

select rownum,sal from (select sal from Salade order by sal desc ) where rownum = 3;这个东西我已经试过了....但答案是“找不到数据”【参考方案3】:
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;

【讨论】:

【参考方案4】:

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

【讨论】:

从工资 rownum 数据如下 a , 1000 b , 2000 c , 3000 d ,4000 e , 5000 f , 6000 e , 7000 select *from 工资 C S a 1000 b 2000 c 3000 d 4000 e 5000 f 6000 g 7000

以上是关于从工资中选择rownum,其中rownum = 3;的主要内容,如果未能解决你的问题,请参考以下文章

Oracle中的伪列

如何从oracle sql中的选择计数中对rownum使用case语句?

Oracle中rownum原理介绍

Oracle的查询-分页查询

Rownum 或 Fetch/offset 适合选择和处理数百万条记录

约束,索引,rownum&rownum