@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;
'개발 > 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 |
댓글