본문 바로가기
개발/sql

oracle over,partition,rank,rank_number

by 카앙구운 2015. 10. 13.
728x90
반응형

@over 함수

over함수는 order by , group by, subQuery를 개선하기 위해 나온 함수이다.


create table test100(a varchar2(10),b varchar2(10) ); //테이블생성


INSERT INTO test100 VALUES ('2','516958');

INSERT INTO test100 VALUES ('1','123458');

INSERT INTO test100 VALUES ('1','458512');

INSERT INTO test100 VALUES ('2','468521');

INSERT INTO test100 VALUES ('2','735196');

INSERT INTO test100 VALUES ('1','794528');

INSERT INTO test100 VALUES ('2','468521');



select count(*) a,b, from test100; // 오류




갯수와 함꼐 나오기 위해서 :select a,b,(select count(*) as cnt from test100) cnt from test100;

해결: select count(*) over() as cnt,a,b from test100;



select max(b) over() as maxValue,a,b from test100;

//min /sum/ avg /STDDEV(컬럼) OVER():전체 행 표준 편차



그룹별 총 개수 출력

select count(*) over(partition by a) as total,a,b from test100;    // a컬럼을 group 짓겠다는 말




위의 그룹내에서도 순서를 짓고 싶다면 order by를 뒤에 써준다.

select count(*) over(partition by a order by b) as total,a,b from test100;


@RANK함수

RANK()함수는 레코드단위로 순차적으로 순위(1부터 출력)을 부여하고 레코드단위로 같은 동일한 순위를 부여한다.

partition by를 사용하면 전체를 한 그룹으로 보는것이 아니라 partition by에 ??컬럼을 기준으로 다르게 그룹을

나누어 순위를 부여한다.

(순위도 그룹별로 별개로 1부터 주어지게 된다.)


select a,b, rank() over(order by a,b) from test100;




select a,b, rank() over(partition by a order by a,b) from test100;




@ ROW_NUMBER()정의

ROW_NUMBER()는 레코드단위로 동일한 값이라도 매번 새로운 순위를 부여한다.

ROW_NUMBER()함수는 각 partition 내에서 over by 절에 의해 정렬된 순서로 주어진 함수

select a,b,row_number() over(order by a,b) as cnt from test100;



728x90
반응형

'개발 > sql' 카테고리의 다른 글

ORA-00917: 누락된 콤마  (2) 2015.11.30
oracle 연결 툴 toad 토드  (0) 2015.10.19
oracle 우편번호 저장하기  (0) 2015.10.13
oracle sql loader,고정길이 컨트롤 파일,position  (0) 2015.10.12
oracle sql tigger  (0) 2015.10.12

댓글