使用 Row_Number、order by 和 where 子句进行 SQL 查询

标签 sql oracle select oracle10g row-number

我有以下 SQL 查询:

select
     ID, COLUMN1, COLUMN2
from
     (select ID, COLUMN1, COLUMN2, row_number() over (order by 2 DESC) NO from A_TABLE)
where
     NO between 0 and 100

我想要做的是选择查询的前 100 条记录
select ID, COLUMN1, COLUMN2 from ATABLE order by 2 DESC

以下是问题:
  • 显然,order by条款不起作用。我注意到我必须添加另一个 order by 2 DESC条款,就在 (...) from ATABLE 之后,让我的查询工作。有什么我做错了吗?或者这是预期的行为?
  • 如何添加 where条款?假设我只需要选择表的前 100 条记录 where COLUMN1 like '%value%' .我试过在 (...) from ATABLE 之后添加 where 子句但它产生了一个错误...

  • 帮助?谢谢。

    PS:我使用的是 Oracle 10g R2。

    最佳答案

    rownum 是一个伪列,用于在应用 where 子句后对结果集中的行进行计数。

    这是你想要得到的吗?

    SELECT *
    FROM ( 
        SELECT id, column1, column2
        FROM atable ORDER BY 2 DESC
    ) 
    WHERE ROWNUM < 100;
    

    因为它是一个伪列,它严格是由 where 子句产生的行计数器,所以它不允许您进行分页(即在 200 和 300 之间)。

    这可能就是你要找的:
    SELECT *
    FROM
     (SELECT a.*, rownum rnum FROM
         (SELECT id, column1, column2 FROM atable ORDER BY 2 DESC) a WHERE rownum <= 300)
    WHERE rnum >= 200;
    

    关于使用 Row_Number、order by 和 where 子句进行 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/834702/

    相关文章:

    mysql - 在 MySQL 中先前查询的结果中查询

    sql - 使用 .NET 从 SQL 过程返回多列

    mysql - SQL 从其他表中选择具有相应值的列

    asp.net - 用户名带有 $ 的 Oracle 连接?

    database - 将 Oracle 过程移植到 PostgreSQL

    sql - 单个查询中的 Postgresql 多个连接,其中连接的外键不存在于所有表中

    sql - 在同一张表上动态交叉选择查询

    sql - 理解sql查询

    sql - Oracle 数据库中 IGNORE_DUP_KEY 的使用(sqlplus)

    javascript - 为什么下拉菜单下的部分颜色变浅?