Sql 使用带有“rownum”的函数&燃气轮机&引用;登录oracle
我想通过rownum函数I_e(rownum>3)选择大于3的行数 例如,如果有25行,我想通过rownum函数检索最后22行。 但是当我写下Sql 使用带有“rownum”的函数&燃气轮机&引用;登录oracle,sql,oracle,pagination,oracle10g,Sql,Oracle,Pagination,Oracle10g,我想通过rownum函数I_e(rownum>3)选择大于3的行数 例如,如果有25行,我想通过rownum函数检索最后22行。 但是当我写下 select * from test_table where rownum>3; 它检索不到行。 有人能帮我解决这个问题吗。 提前感谢在RDBMS中,没有第一行或最后一行。你所谓的“raws”,实际上是set(集合),它们可以被排序也可以不排序rownum是一个函数,它只是枚举结果集,只有在计算了结果集之后才有意义,要对数据集(行)进行排序,您应
select * from test_table where rownum>3;
它检索不到行。
有人能帮我解决这个问题吗。
提前感谢在RDBMS中,没有第一行或最后一行。你所谓的“raws”,实际上是set(集合),它们可以被排序也可以不排序
rownum
是一个函数,它只是枚举结果集,只有在计算了结果集之后才有意义,要对数据集(行)进行排序,您应该在查询中执行此操作。在调用rownum
之前,您必须在特定的select语句中告诉DB顺序的含义
select * from (select rownum as rn, t.* from test_table t) where rn > 3
有关更多示例,请参阅本文
它不起作用,因为:对于第一行,假设
ROWNUM
为1,并且由于WHERE
子句为ROWNUM>3
,那么这将减少到1>3,并且该行被丢弃。随后,将根据ROWNUM
值1测试下一行(因为上一行不再在输出中,现在不需要行号),这将再次导致测试失败并被丢弃。重复,ad nauseum和所有行均未通过WHERE
子句筛选,并被丢弃
如果要为行分配一个ROWNUM
,则需要执行以下操作:子查询:
SELECT * -- Finally, in the outer query, filter on the assigned ROWNUM
FROM (
SELECT t.*, -- First, in the inner sub-query, apply a ROWNUM
ROWNUM AS rn
FROM test_table t
)
WHERE rn > 3;
或者,如果要在编号前对结果排序:
SELECT * -- Finally, in the outer query, filter on the assigned ROWNUM
FROM (
SELECT t.*, -- Second, in the next level sub-query, apply a ROWNUM
ROWNUM AS rn
FROM (
SELECT * -- First, in the inner-most sub-query, apply an order
FROM test_table
ORDER BY some_column
) t
)
WHERE rn > 3;
作为select*从您尝试搜索的行所在的test_表中进行尝试?例如,有许多类似的问题。此外,您需要定义如何确定一行是否“大于”另一行“大于正整数的ROWNUM值的测试条件始终为false”这不是ROWNUM的工作方式。您可以使用行数分析函数来实现这一点,但您仍然需要确定列的排序依据。实现结果的一种方法是-select*from test_table减去select*from test_table,其中rownum@Tom穆蒂伦蒂,这个结果意味着什么?给“几行”,哦,不,“几行”太多了,少给我3行。RDBMS中的“Relational”一词一定意味着什么,不是吗?ROWNUM
不是一个函数,而是一个函数。此外,您不需要指定顺序-如果不指定顺序,Oracle将按照检索到的行的相同顺序对行进行编号(这可能导致不确定的顺序)。“@MT0不同意,是的,根据Oracle文档,rownum是pseudocolumn,但将其视为函数不是错误的。”Pseudocolumns“行为类似于表列,这就是为什么它们称为“伪列”,但实际上它们是作为系统函数实现的。谢谢您的回答。。。。