Oracle Advanced SQL 강좌
분석함수란? 6 5 99,999+

by 마농 분석함수 OVER PARTITION BY 집계함수 WINDOWING 절 PRECEDING FOLLOWIN [2014.01.14]


분석함수란?

  • - 테이블에 있는 데이터를 특정 용도로 분석하여 결과를 반환하는 함수
  • - 복잡한 계산을 단순하게 처리해주는 함수
  • - 쿼리 결과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

참고링크

- 강좌 URL : http://www.gurubee.net/lecture/2671

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by 팔오 [2014.03.25 09:58:18]
OVER가 정확히 먼지 몰랐는데 알게되었네요~ ^^

by 박민철 [2014.08.28 16:12:19]

필요한 정보였는데~

감사드려요^^


by 윈짱천사 [2015.01.08 11:29:18]

분석함수에.. 대해서.. 정확한 개념을.. 알게 된것 같아요..

항상 감사합니다.. ^^*


by 차차 [2017.04.07 08:02:13]

말씀대로 분석함수, 집계함수에 대한 이해가 많이 부족했네요

덕분에 개념 잡고 갑니다 감사해요!


by 기리 [2017.11.07 16:02:44]

항상 감사합니다 ~

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입