26

ROWNUM和 和有什么不一样ROW_NUMBER

4

5 回答 5

42

ROWNUM 是一个“伪列”,它为查询返回的每一行分配一个数字:

SQL> select rownum, ename, deptno
  2  from emp;

    ROWNUM ENAME          DEPTNO
---------- ---------- ----------
         1 SMITH              99
         2 ALLEN              30
         3 WARD               30
         4 JONES              20
         5 MARTIN             30
         6 BLAKE              30
         7 CLARK              10
         8 SCOTT              20
         9 KING               10
        10 TURNER             30
        11 FORD               20
        12 MILLER             10

ROW_NUMBER 是一个分析函数,它根据在一组行中的顺序为每一行分配一个数字:

SQL> select ename, deptno, row_number() over (partition by deptno order by ename) rn
  2  from emp;

ENAME          DEPTNO         RN
---------- ---------- ----------
CLARK              10          1
KING               10          2
MILLER             10          3
FORD               20          1
JONES              20          2
SCOTT              20          3
ALLEN              30          1
BLAKE              30          2
MARTIN             30          3
TURNER             30          4
WARD               30          5
SMITH              99          1
于 2008-10-06T14:56:31.167 回答
1

从一点点阅读来看,ROWNUM 是 Oracle 自动分配给行集的值(在评估 ORDER BY 之前,因此永远 不要ORDER BY ROWNUM使用 a 或将 a与 aWHERE ROWNUM < 10一起使用ORDER BY)。

ROW_NUMBER()似乎是一个函数,用于将行号分配给子查询或分区返回的结果集。

于 2008-10-06T14:58:14.723 回答
1

除了答案中提到的其他差异外,您还应该考虑性能。这里有一份非权威但很有趣的报道,比较了各种分页方式,其中使用了ROWNUMcompare to ROW_NUMBER() OVER()

http://www.inf.unideb.hu/~gabora/pagination/results.html

于 2012-07-18T09:47:48.930 回答
-1

rownum是一个伪列,可以添加到任何选择查询中,对返回的行进行编号(从 1 开始)。它们根据何时被识别为最终结果集的一部分进行排序。( #ref )

row_number是一个分析函数,可用于按照 row_number() 函数规定的顺序对查询返回的行进行编号。

于 2008-10-06T15:01:11.033 回答
-1

Rownum 以 1 开始 ..在条件评估结果为 true 后增加。因此 rownum >=1 返回表中的所有行

于 2015-06-07T13:53:42.500 回答