1.1. 분석함수란?

2019. 4. 24. 14:44 Database/Oracle SQL2

분석함수란?

  • - 테이블에 있는 데이터를 특정 용도로 분석하여 결과를 반환하는 함수
  • - 복잡한 계산을 단순하게 처리해주는 함수
  • - 쿼리 결과Set을 대상으로 계산을 수행하는 함수
  • - SELECT 절에서 수행됨
    • FROM, WHERE, GROUP BY 절에서 사용 불가
    • ORDER BY 구문에서는 사용 가능
  • - 오라클 8.1.6 부터 분석함수 지원

집계함수 vs 분석함수

집계함수

집계함수는 여러행 또는 테이블 전체 행으로부터 그룹별로 집계하여 결과를 반환한다.

SELECT deptno
     , SUM(sal) s_sal
  FROM emp
 GROUP BY deptno;


  • [그림] 집계함수 실행결과

분석함수

분석 함수는 집계 결과를 각 행마다 보여준다.

SELECT deptno
     , empno
     , sal
     , SUM(sal) OVER(PARTITION BY deptno) s_sal
  FROM emp;



  • [그림] 분석함수 실행결과

집계함수 vs 분석함수
  • - 집계함수는 그룹별 최대, 최소, 합계, 평균, 건수 등을 구할 때 사용되며, 그룹별 1개의 행을 반환한다.
  • - 분석함수는 그룹단위로 값을 계산한다는 점에서 집계함수와 유사하지만, 그룹마다가 아니라 결과Set의 각 행마다 집계결과를 보여준다는 점에서 집계함수와 상당한 차이가 있다.
  • - 분석함수는 쉽게 생각해서, 그룹별 계산결과를 각 행마다 보여주는 것이다.

Syntax

SELECT ANALYTIC_FUNCTION ( arguments )
       OVER ( [ PARTITION BY 컬럼List ]
              [ ORDER BY 컬럼List ]
              [ WINDOWING 절 (Rows|Range Between)]
            )
  FROM 테이블 명;


  • - ANALYTIC_FUNCTION : 분석함수명(입력인자)
  • OVER : 분석함수임을 나타내는 키워드.
  • PARTITION BY : 계산 대상 그룹을 정한다.
  • ORDER BY : 대상 그룹에 대한 정렬을 수행한다.
  • - WINDOWING 절 : 분석함수의 계산 대상 범위를 지정한다.
    • ORDER BY 절에 종속적이다.
    • 기본 생략 구문 : 정렬된 결과의 처음부터 현재행까지 [RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]

분석함수의 종류

  • 순위함수 : RANK, DENSE_RANK, ROW_NUMBER, NTILE
  • 집계함수 : SUM, MIN, MAX, AVG, COUNT
  • - 기타함수 : LEAD, LAG, FIRST_VALUE, LAST_VALUE, RATIO_TO_REPORT
  • - 분석함수(?) : KEEP, LISTAGG


출처 : http://www.gurubee.net/lecture/2671

'Database > Oracle SQL2' 카테고리의 다른 글

2.3. Rollup 결과 행 구분  (0) 2019.04.24
2.2. Rollup 예제  (0) 2019.04.24
2.1. Rollup  (0) 2019.04.24
1.6. KEEP, LISTAGG  (0) 2019.04.24
1.5. 기타 함수  (0) 2019.04.24
1.4. 윈도우 함수  (0) 2019.04.24
1.3. 집계함수  (0) 2019.04.24
1.2. 순위함수  (0) 2019.04.24