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またはを使用WHERE ROWNUM < 10しないでくださいORDER BY)。

ROW_NUMBER()は、サブクエリまたはパーティションによって返される結果セットに行番号を割り当てるための関数のようです。

于 2008-10-06T14:58:14.723 に答える
1

回答に記載されている他の違いとは別に、パフォーマンスも考慮する必要があります。ここには、権威はありませんが非常に興味深いレポートがあり、ページネーションのさまざまな手段をROWNUM比較していROW_NUMBER() OVER()ます。

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

于 2012-07-18T09:47:48.930 に答える
-1

rownumは、返される行に番号を付けるために、任意のselectクエリに追加できる疑似列です(1から始まります)。それらは、最終結果セットの一部であると識別された時期に従って順序付けられます。(#ref

row_numberはアナリティックの関数であり、row_number()関数で指定された順序でクエリによって返された行に番号を付けるために使用できます。

于 2008-10-06T15:01:11.033 に答える