깊이 연구:oracle 중 rownumber()over()분석 함수 용법

row_number()over(partition by col 1 order by col 2)는 col 1 에 따라 그룹 을 나 누고 그룹 내부 에서 col 2 에 따라 정렬 하 는 것 을 나타 내 며 이 함수 가 계산 한 값 은 각 그룹 내부 에서 정렬 된 순서 번호(그룹 내 연속 유일한 것)를 나타 낸다.rownum 과 의 차이 점 은 rownum 을 사용 하여 정렬 할 때 결과 집합 에 위조 rownum 을 추가 한 다음 에 정렬 하 는 것 입 니 다.이 함 수 는 정렬 종문 을 포함 한 다음 에 정렬 한 다음 에 줄 번 호 를 계산 합 니 다.row_number()와 rownum 의 차이 가 많 지 않 고 기능 이 더 강하 다(각 그룹 에서 1 부터 정렬 할 수 있다).rank()는 점프 정렬 입 니 다.2 등 이 두 개 있 을 때 4 등(같은 그룹 내)denserank()도 연속 순위 로 2 등 이 두 개 있 을 때 도 3 등 을 따른다.비교 해 보면 rownumber 는 중복 값 이 없습니다.oracle 분석 함수 rownumber(),정수 치 를 되 돌려 줍 니 다(>=1).문법 형식:1.rownumber() over (order by col_1[,col_2...]역할:col1[,col_2...]정렬,정렬 후의 결과 집합 을 되 돌려 줍 니 다.이 용법 은 rownum 과 같 습 니 다.줄 마다 다른 값 을 되 돌려 줍 니 다

select rownum,ename,job,   
    row_number() over (order by rownum) row_number   
from emp;   
    ROWNUM ENAME      JOB       ROW_NUMBER   
---------- ---------- --------- ----------   
         1 SMITH      CLERK              1   
         2 ALLEN      SALESMAN           2   
         3 WARD       SALESMAN           3   
         4 JONES      MANAGER            4   
         5 MARTIN     SALESMAN           5   
         6 BLAKE      MANAGER            6   
         7 CLARK      MANAGER            7   
         8 SCOTT      ANALYST            8   
         9 KING       PRESIDENT          9   
        10 TURNER     SALESMAN          10   
        11 ADAMS      CLERK             11   
        12 JAMES      CLERK             12   
        13 FORD       ANALYST           13   
        14 MILLER     CLERK             14 
partition by 자구 가 없 으 면 결과 집합 은 order by 가 지정 한 열 에 따라 정렬 됩 니 다

with row_number_test as(   
     select 22 a,'twenty two' b from dual union all   
     select 1,'one' from dual union all   
     select 13,'thirteen' from dual union all   
     select 5,'five' from dual union all   
     select 4,'four' from dual)   
select a,b,   
       row_number() over (order by b)   
from row_number_test   
order by a; 
우리 가 기대 하 는 바 와 같이 rownumber()는 b 열 에 따라 정렬 한 결 과 를 되 돌려 주 고 a 에 따라 정렬 한 다음 에 다음 과 같은 결 과 를 얻 을 수 있 습 니 다

A B          ROW_NUMBER()OVER(ORDERBYB)   
-- ---------- --------------------------   
1 one                                 3   
4 four                                2   
5 five                                1   
13 thirteen                            4   
22 twenty two                          5 
2.rownumber() over (partition by col_n[,col_m ...] order by col_1[,col_2...]역할:col 에 따라n[,col_m...조 를 나 누고 각 조 에서 col1[,col_2...]정렬(오름차 순)을 하고 마지막 에 정렬 된 결과 집합 을 되 돌려 줍 니 다

with row_number_test as(   
     select 22 a,'twenty two' b,'*' c from dual union all   
     select 1,'one','+' from dual union all   
     select 13,'thirteen','*' from dual union all   
     select 5,'five','+' from dual union all   
     select 4,'four','+' from dual)   
select a,b,   
       row_number() over (partition by c order by b) row_number   
from row_number_test   
order by a; 
이 예 에서 우 리 는 먼저 c 열 에 따라 2 조('*'조,'+'조)로 나 눈 다음 에 각 그룹의 b 열 에 따라 정렬(문자열 이니셜 의 ascii 코드 로 배열)하고 마지막 에 a 열 에 따라 정렬 하여 다음 결과 집합 을 얻 습 니 다

A B          ROW_NUMBER   
-- ---------- ----------   
1 one                 3   
4 four                2   
5 five                1   
13 thirteen            1   
22 twenty two         

좋은 웹페이지 즐겨찾기