Oracle 분석 함수 총화 (1) - 기본 개념 과 문법
Analytic functions are the last set of operations performed in a query except for the final ORDER BY clause. All joins and all WHERE, GROUP BY, and HAVING clauses are completed before the analytic functions are processed. Therefore, analytic functions can appear only in the select list or ORDER BY clause.
분석 함 수 는 한 줄 집합 을 바탕 으로 집합 값 을 계산 하 는데 집합 함수 와 다른 점 은 분석 함수 가 여러 줄 로 돌아 가 는 것 이다.
(많은 분석 함수 도 집합 함수 로 사용 할 수 있 지만 두 가지 용법 은 문법 적 으로 차이 가 있 을 뿐이다)
줄 집합 은 창 이 라 고 불 리 며 줄 마다 미끄럼 창 을 정의 합 니 다.이 창 은 현재 줄 에 대해 계산 할 줄 의 범 위 를 결정 합 니 다.
창의 크기 는 물리 적 (줄 번호) 일 수도 있 고 논리 적 (값 범위) 일 수도 있 습 니 다.
마지막 order by 자 구 를 제외 하고 분석 함 수 는 검색 에서 마지막 으로 실 행 된 작업 입 니 다.
모든 join, where, group by, having 문 구 는 함 수 를 분석 하기 전에 실 행 됩 니 다.
따라서 분석 함 수 는 selection 구문 이나 order by 자구 에 만 나타 날 수 있 습 니 다.
분석 함수 문법 analyticfunction([arguments])
OVER(
[partition_clause]
[order_by_clause[windowing_clause]]
)
1) 분석 함 수 는 다음 과 같은 분석 함수 가 있 습 니 다. * 번 을 가 진 함 수 는 windowing 자 구 를 허용 합 니 다.
AVG *
CORR *
COUNT *
COVAR_POP *
COVAR_SAMP *
CUME_DIST
DENSE_RANK
FIRST
FIRST_VALUE *
LAG
LAST
LAST_VALUE *
LEAD
LISTAGG
MAX *
MIN *
NTH_VALUE*
NTILE
PERCENT_RANK
PERCENTILE_CONT
PERCENTILE_DISC
RANK
RATIO_TO_REPORT
REGR_ (Linear Regression) Functions *
ROW_NUMBER
STDDEV *
STDDEV_POP *
STDDEV_SAMP *
SUM *
VAR_POP *
VAR_SAMP *
VARIANCE *
2) PARTITION 자 구 는 표현 식 에 따라 그룹 을 나 누고 이 자 구 를 생략 하면 모든 결과 집합 이 하나의 그룹 으로 간주 된다.
3) ORDER BY 자구 ORDER BY 는 기본 WINDOWING 자 구 를 추가 합 니 다. 이 창 은 그룹의 첫 줄 부터 현재 줄 (값) 까지 계속 합 니 다.
즉, 준비 및 고객 ROW 를 중단 하기 전에 RANGE.
ORDER BY 가 없 을 때 기본 창 은 그룹의 모든 줄 입 니 다.
4) WINDOWING 자구 정의 분석 함수 역할 의 줄 집합, 집합 중의 데 이 터 는 하나의 창 으로 볼 수 있다.
WINDOWING 자 구 를 사용 하려 면 ORDER BY 자 구 를 사용 해 야 합 니 다.
창 을 만 드 는 키워드 가 두 개 있 습 니 다: ROWS 와 RANGE.
ROWS 는 물리 적 창 (줄) 을 표시 합 니 다.RANGE 는 논리 창 을 표시 합 니 다.
BETWEEN... AND: 하나의 범 위 를 지정 합 니 다. 생략 하면 하나의 점 만 지정 합 니 다. 출발점 이 되 고 종점 은 현재 줄 입 니 다.
UNBOUNDED PRECEDING: 창 은 현재 그룹의 첫 줄 에서 시작 합 니 다.
UNBOUNDED FOLLOWING: 창 을 표시 합 니 다. 현재 그룹의 마지막 줄 에서 끝 납 니 다.
CURRENT ROW: 창 이 현재 줄 이나 현재 값 에서 시작 / 끝 났 음 을 나 타 냅 니 다.
value_expr PRECEDING/value_expr FOLLOWING: 물리 적 또는 논리 적 오프셋 을 지정 합 니 다.
다음은 몇 가지 예 를 통 해 이러한 개념 을 이해한다.emp 표 에는 다음 과 같은 데이터 가 있 습 니 다.
tony@ORCL1> select empno,ename,sal,deptno
2 from emp order by deptno, sal;
EMPNO ENAME SAL DEPTNO
---------- ---------- ---------- ----------
7934 MILLER 1300 10
7782 CLARK 2450 10
7839 KING 5000 10
7369 SMITH 800 20
7876 ADAMS 1100 20
7566 JONES 2975 20
7788 SCOTT 3000 20
7902 FORD 3000 20
7900 JAMES 950 30
7654 MARTIN 1250 30
7521 WARD 1250 30
7844 TURNER 1500 30
7499 ALLEN 1600 30
7698 BLAKE 2850 30
14 rows selected.
wmsys.wm_concat () 함 수 는 필드 를 합 쳐 여러 줄 의 한 열 데 이 터 를 한 줄 로 합 쳐 표시 할 수 있 습 니 다.예 를 들 어 이 함 수 를 이용 하여 한 부서 의 모든 이름 을 한 줄 에 표시 합 니 다.
tony@ORCL1> column emp_list format a40
tony@ORCL1> select deptno, wm_concat(ename) emp_list
2 from emp group by deptno;
DEPTNO EMP_LIST
---------- ----------------------------------------
10 CLARK,MILLER,KING
20 SMITH,FORD,ADAMS,SCOTT,JONES
30 ALLEN,JAMES,TURNER,BLAKE,MARTIN,WARD
위의 예 에서 wmconcat () 는 취 합 함수 로 사용 되 며 분석 함수 로 서 의 결 과 를 살 펴 보 겠 습 니 다.취 합 함수 의 용법 과 달리 분석 함수 가 줄 마다 결 과 를 되 돌려 주 는 것 을 볼 수 있 습 니 다.
tony@ORCL1> select ename,deptno,
2 wm_concat(ename) over (partition by deptno) emp_list
3 from emp;
ENAME DEPTNO EMP_LIST
---------- ---------- ----------------------------------------
CLARK 10 CLARK,KING,MILLER
KING 10 CLARK,KING,MILLER
MILLER 10 CLARK,KING,MILLER
JONES 20 JONES,FORD,ADAMS,SMITH,SCOTT
FORD 20 JONES,FORD,ADAMS,SMITH,SCOTT
ADAMS 20 JONES,FORD,ADAMS,SMITH,SCOTT
SMITH 20 JONES,FORD,ADAMS,SMITH,SCOTT
SCOTT 20 JONES,FORD,ADAMS,SMITH,SCOTT
WARD 30 WARD,TURNER,ALLEN,JAMES,BLAKE,MARTIN
TURNER 30 WARD,TURNER,ALLEN,JAMES,BLAKE,MARTIN
ALLEN 30 WARD,TURNER,ALLEN,JAMES,BLAKE,MARTIN
JAMES 30 WARD,TURNER,ALLEN,JAMES,BLAKE,MARTIN
BLAKE 30 WARD,TURNER,ALLEN,JAMES,BLAKE,MARTIN
MARTIN 30 WARD,TURNER,ALLEN,JAMES,BLAKE,MARTIN
14 rows selected.
위의 예 는 order by 자 구 를 추가 하지 않 았 습 니 다. 앞에서 말 했 듯 이 order by 자구 가 없 으 면 기본 창 은 그룹의 모든 줄 입 니 다.그래서 각 부서 에서 조 를 나 누 는 모든 사람의 이름 이 표 시 됩 니 다.다음은 order by 자 구 를 더 하면 어떻게 되 는 지 살 펴 보 겠 습 니 다.결과 가 재 미 있 는 이 유 는 앞에서 언급 한 order by 절 에 기본 창 을 추가 하기 때 문 입 니 다. RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 는 그룹의 첫 줄 부터 현재 줄 (값) 까지 계속 합 니 다.
tony@ORCL1> select ename,deptno,
2 wm_concat(ename) over (partition by deptno order by ename) emp_list
3 from emp;
ENAME DEPTNO EMP_LIST
---------- ---------- ----------------------------------------
CLARK 10 CLARK
KING 10 CLARK,KING
MILLER 10 CLARK,KING,MILLER
ADAMS 20 ADAMS
FORD 20 ADAMS,FORD
JONES 20 ADAMS,FORD,JONES
SCOTT 20 ADAMS,FORD,JONES,SCOTT
SMITH 20 ADAMS,FORD,JONES,SCOTT,SMITH
ALLEN 30 ALLEN
BLAKE 30 ALLEN,BLAKE
JAMES 30 ALLEN,BLAKE,JAMES
MARTIN 30 ALLEN,BLAKE,JAMES,MARTIN
TURNER 30 ALLEN,BLAKE,JAMES,MARTIN,TURNER
WARD 30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD
14 rows selected.
몇 가지 예 를 더 보 자.partition 자구 와 order by 자구 가 없습니다. 창 은 그룹의 모든 줄 입 니 다.
tony@ORCL1> column sal format $99999.99
tony@ORCL1> column avgsal format $99999.99
tony@ORCL1> column sumsal format $99999.99
tony@ORCL1> select ename, sal, sum(sal) over() sumsal from emp;
ENAME SAL SUMSAL
---------- ---------- ----------
SMITH $800.00 $29025.00
ALLEN $1600.00 $29025.00
WARD $1250.00 $29025.00
JONES $2975.00 $29025.00
MARTIN $1250.00 $29025.00
BLAKE $2850.00 $29025.00
CLARK $2450.00 $29025.00
SCOTT $3000.00 $29025.00
KING $5000.00 $29025.00
TURNER $1500.00 $29025.00
ADAMS $1100.00 $29025.00
JAMES $950.00 $29025.00
FORD $3000.00 $29025.00
MILLER $1300.00 $29025.00
14 rows selected.
order by 자구 가 열 리 지 않 았 습 니 다. 창 은 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 입 니 다. 즉, 그룹의 첫 줄 을 현재 줄 (값) 로 나 누 는 것 입 니 다.
tony@ORCL1> select ename, sal,
2 sum(sal) over(order by ename) sumsal
3 from emp;
ENAME SAL SUMSAL
---------- ---------- ----------
ADAMS $1100.00 $1100.00
ALLEN $1600.00 $2700.00
BLAKE $2850.00 $5550.00
CLARK $2450.00 $8000.00
FORD $3000.00 $11000.00
JAMES $950.00 $11950.00
JONES $2975.00 $14925.00
KING $5000.00 $19925.00
MARTIN $1250.00 $21175.00
MILLER $1300.00 $22475.00
SCOTT $3000.00 $25475.00
SMITH $800.00 $26275.00
TURNER $1500.00 $27775.00
WARD $1250.00 $29025.00
14 rows selected.
order by 가 salary 를 지정 하면 결과 에서 같은 salary 값 의 줄 의 결 과 를 주의 하 십시오.기본 창 자구 인 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 는 논리 창, 즉 현재 값 과 같은 모든 줄 까지 의 첫 번 째 줄 이기 때 문 입 니 다.
tony@ORCL1> select ename, sal,
2 sum(sal) over(order by sal) sumsal
3 from emp;
ENAME SAL SUMSAL
---------- ---------- ----------
SMITH $800.00 $800.00
JAMES $950.00 $1750.00
ADAMS $1100.00 $2850.00
WARD $1250.00 $5350.00
MARTIN $1250.00 $5350.00
MILLER $1300.00 $6650.00
TURNER $1500.00 $8150.00
ALLEN $1600.00 $9750.00
CLARK $2450.00 $12200.00
BLAKE $2850.00 $15050.00
JONES $2975.00 $18025.00
SCOTT $3000.00 $24025.00
FORD $3000.00 $24025.00
KING $5000.00 $29025.00
14 rows selected.
부문 별로 임금 총계 의 결 과 를 계산 하 다.
tony@ORCL1> select ename, sal, deptno,
2 sum(sal) over(partition by deptno) sumsal
3 from emp;
ENAME SAL DEPTNO SUMSAL
---------- ---------- ---------- ----------
CLARK $2450.00 10 $8750.00
KING $5000.00 10 $8750.00
MILLER $1300.00 10 $8750.00
JONES $2975.00 20 $10875.00
FORD $3000.00 20 $10875.00
ADAMS $1100.00 20 $10875.00
SMITH $800.00 20 $10875.00
SCOTT $3000.00 20 $10875.00
WARD $1250.00 30 $9400.00
TURNER $1500.00 30 $9400.00
ALLEN $1600.00 30 $9400.00
JAMES $950.00 30 $9400.00
BLAKE $2850.00 30 $9400.00
MARTIN $1250.00 30 $9400.00
14 rows selected.
부문 별로 임금 총계 의 결 과 를 계산 하 다.order by 자구 가 있 기 때문에 기본 창 자구 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 가 추가 되 었 습 니 다.
tony@ORCL1> select ename, sal, deptno,
2 sum(sal) over(partition by deptno order by ename) sumsal
3 from emp;
ENAME SAL DEPTNO SUMSAL
---------- ---------- ---------- ----------
CLARK $2450.00 10 $2450.00
KING $5000.00 10 $7450.00
MILLER $1300.00 10 $8750.00
ADAMS $1100.00 20 $1100.00
FORD $3000.00 20 $4100.00
JONES $2975.00 20 $7075.00
SCOTT $3000.00 20 $10075.00
SMITH $800.00 20 $10875.00
ALLEN $1600.00 30 $1600.00
BLAKE $2850.00 30 $4450.00
JAMES $950.00 30 $5400.00
MARTIN $1250.00 30 $6650.00
TURNER $1500.00 30 $8150.00
WARD $1250.00 30 $9400.00
14 rows selected.
각 부문의 급여 평균 치 를 계산 하 다.
tony@ORCL1> select ename, sal, deptno,
2 avg(sal) over(partition by deptno) avgsal
3 from emp;
ENAME SAL DEPTNO AVGSAL
---------- ---------- ---------- ----------
CLARK $2450.00 10 $2916.67
KING $5000.00 10 $2916.67
MILLER $1300.00 10 $2916.67
JONES $2975.00 20 $2175.00
FORD $3000.00 20 $2175.00
ADAMS $1100.00 20 $2175.00
SMITH $800.00 20 $2175.00
SCOTT $3000.00 20 $2175.00
WARD $1250.00 30 $1566.67
TURNER $1500.00 30 $1566.67
ALLEN $1600.00 30 $1566.67
JAMES $950.00 30 $1566.67
BLAKE $2850.00 30 $1566.67
MARTIN $1250.00 30 $1566.67
14 rows selected.
다음은 창문 을 여 는 예 를 몇 개 더 보 겠 습 니 다.이름 순 으로 앞의 세 줄 과 본 은행 의 월급 총 계 를 계산한다.
tony@ORCL1> select ename, sal,
2 sum(sal) over(order by ename rows 3 preceding) sumsal
3 from emp;
ENAME SAL SUMSAL
---------- ---------- ----------
ADAMS $1100.00 $1100.00
ALLEN $1600.00 $2700.00
BLAKE $2850.00 $5550.00
CLARK $2450.00 $8000.00
FORD $3000.00 $9900.00
JAMES $950.00 $9250.00
JONES $2975.00 $9375.00
KING $5000.00 $11925.00
MARTIN $1250.00 $10175.00
MILLER $1300.00 $10525.00
SCOTT $3000.00 $10550.00
SMITH $800.00 $6350.00
TURNER $1500.00 $6600.00
WARD $1250.00 $6550.00
14 rows selected.
새 물 순위 에 따라 계산 > = (자기 월급 - 100) and & & & lt; 자신의 월급 의 모든 사람의 월급 총계
tony@ORCL1> select ename, sal,
2 sum(sal) over(order by sal range 100 preceding) sumsal
3 from emp;
ENAME SAL SUMSAL
---------- ---------- ----------
SMITH $800.00 $800.00
JAMES $950.00 $950.00
ADAMS $1100.00 $1100.00
WARD $1250.00 $2500.00
MARTIN $1250.00 $2500.00
MILLER $1300.00 $3800.00
TURNER $1500.00 $1500.00
ALLEN $1600.00 $3100.00
CLARK $2450.00 $2450.00
BLAKE $2850.00 $2850.00
JONES $2975.00 $2975.00
SCOTT $3000.00 $8975.00
FORD $3000.00 $8975.00
KING $5000.00 $5000.00
14 rows selected.
새 물 순위 에 따라 계산 > = (자신의 월급 - 100) and < = (자신의 월급 + 200) 의 모든 사람의 월급 총계
tony@ORCL1> select ename, sal,
2 sum(sal) over(order by sal range
3 between 100 preceding and 200 following) sumsal
4 from emp;
ENAME SAL SUMSAL
---------- ---------- ----------
SMITH $800.00 $1750.00
JAMES $950.00 $2050.00
ADAMS $1100.00 $4900.00
WARD $1250.00 $3800.00
MARTIN $1250.00 $3800.00
MILLER $1300.00 $5300.00
TURNER $1500.00 $3100.00
ALLEN $1600.00 $3100.00
CLARK $2450.00 $2450.00
BLAKE $2850.00 $11825.00
JONES $2975.00 $8975.00
SCOTT $3000.00 $8975.00
FORD $3000.00 $8975.00
KING $5000.00 $5000.00
14 rows selected.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
SQL JOINS 조인● LEFT JOIN A-B ● RIGHT JOIN B-A ● OUTER JOIN A∪B A∪B-(A∩B): A∪B에서 A, B의 기본키 부분을 뺌 ● SELF JOIN A∩B...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.