2008-10-06 89 views

回答

35

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 
1

從一個小閱讀,ROWNUM是Oracle自動分配到行集的值(ORDER BY被評估之前,所以不要曾經ORDER BY ROWNUM或使用WHERE ROWNUM < 10ORDER BY)。

ROW_NUMBER()似乎是將行號分配給由子查詢或分區返回的結果集的函數。

+0

order by is ok例如,select * from(select a,b,c from foo order by d)其中rownum <10 – Ron 2009-12-04 00:18:35

+2

@Ron:試一試。你會發現,從整個結果集中取得前10個結果,然後對它們進行排序是很困難的。 – Powerlord 2009-12-04 14:47:32

-1

rownum是一個僞列,可以添加到任何選擇查詢中,爲返回的行編號(從1開始)。他們根據何時被確定爲最終結果集的一部分進行排序。 (#ref

row_number是一個分析函數,它可以用於按照row_number()函數強制的順序對查詢返回的行進行編號。

-1

ROWNUM用後病情評估結果爲真1個..increases開始。 因此,rownum> = 1返回表

中的所有行
相關問題