В чем разница между ROWNUM и ROW_NUMBER в базе данных Oracle?

StackOverflow https://stackoverflow.com/questions/174595

  •  05-07-2019
  •  | 
  •  

Вопрос

В чем разница между ROWNUM и ROW_NUMBER?

Это было полезно?

Решение

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

Другие советы

Из небольшого прочтения, ROWNUM - это значение, автоматически назначаемое Oracle для набора строк (до оценки ORDER BY, поэтому не никогда ORDER BY ROWNUM и не используйте WHERE ROWNUM < 10 с ORDER BY).

ROW_NUMBER () отображается для быть функцией для назначения номеров строк результирующему набору, возвращенному подзапросом или разделом.

Помимо других отличий, упомянутых в ответах, вы также должны учитывать производительность. Здесь есть неавторизованный, но очень интересный отчет, сравнивающий различные способы нумерации страниц, среди которых использование ROWNUM по сравнению с ROW_NUMBER() OVER():

http://www.inf.unideb.hu/~gabora/ нумерация страницы / results.html

rownum - псевдоколонка, которую можно добавить к любому выбору запрос для нумерации возвращаемых строк (начиная с 1). Они упорядочены в соответствии с тем, когда они были определены как часть окончательного набора результатов. ( #ref )

row_number - это аналитическая функция, которая может быть используется для нумерации строк, возвращаемых запросом, в порядке, указанном функцией row_number ().

Rownum начинается с 1 .. увеличивается после того, как условие оценивает результаты как true. Следовательно, rownum & Gt; = 1 возвращает все строки в таблице

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top