3 분 소요

함수 (그룹 함수, 윈도우 함수)

그룹 함수

  • 그룹 별 소계 및 중계 등 중간 합계 분석 데이터를 산출 하기 위해 사용하는 함수이다.
  • GROUP BY 절이 필수로 요구되며, GROUP BY 절 뒤에 위치하게 된다.
  • 하나 이상의 칼럼을 값에 다라 그룹화 하여 그룹 별로 출력하는 함수이다.

ROLL UP

SELECT 그룹화칼럼1, 그룸화칼럼2, SUM(SALRARY) FROM 테이블
	GROUP BY ROLLUP(그룹화칼럼1, 그룸화칼럼2);
  • ROLL UP 은 GROUP BY 칼럼에 대해서 SubTotal을 만들어 준다.
  • GROUP BY 구에 칼럼이 두 개 이상 왔을 때 순서에 따라 결과가 달라진다.

GROUPING

SELECT 그룹화칼럼1,GROUPING(그룹화칼럼1),
그룸화칼럼2,GROUPING(그룹화칼럼2),SUM(SALRARY)
FROM 테이블
	GROUP BY ROLLUP(그룹화칼럼1, 그룸화칼럼2);
  • GROUPING은 다른 그룹함수를 통해 나온 합계값을 어떤 칼럼별로 계산되었는지를 구분하기 위해 만들어진 함수이다.
  • 출력시 그룹핑 항목이 출력되며 해당 칼럼에 대한 집계일 경우 1로서 표시된다.
  • 1로서 표시되는 이 특성에 DECODE 함수를 사용하여 좀 더 시각성을 높일 수 있다.
SELECT 그룹화칼럼1,DECODE(GROUPING(그룹화칼럼1),1,'전체합계') 별칭
그룸화칼럼2,DECODE(GROUPING(그룹화칼럼2),1,'부분합계') 별칭, SUM(SALRARY)
FROM 테이블
	GROUP BY ROLLUP(그룹화칼럼1, 그룸화칼럼2);

GROUPING SETS

  • GROUPING SETS 는 GROUP BY에 나오는 칼럼의 순서와 관계 없이 다양한 소계를 만들 수 있다.
  • GROUPING SETS 는 GROUP BY에 나오는 칼럼의 순서와 관계 없이 개별적으로 모두 처리한다.
  • ROLLUP과 다르게 DIY로 집계 구조를 자유롭게 설정 가능하다.
SELECT 그룹화칼럼1, 그룸화칼럼2, SUM(SALRARY) FROM 테이블
	GROUP BY GROUPING SETS(그룹화칼럼1, 그룸화칼럼2);

CUBE

  • CUBE는 CUBE 함수에 제시한 칼럼에 대해서 결합 가능한 모든 집계를 계산한다.
  • 다차원 집계를 제공하여 다양하게 데이터를 분석할 수 있게 한다.
  • 조합할 수 있는 경우의 수가 모두 조합되는 것이다.
SELECT 그룹화칼럼1, 그룸화칼럼2, SUM(SALRARY) FROM 테이블
	GROUP BY CUBE (그룹화칼럼1, 그룸화칼럼2);

윈도우 함수

  • 윈도우 함수는 마치 창문을 통해 세상의 한 부분만 보듯이 테이블 전체가 아닌 특정 부분만을 사용해 데이터를 조회하는 함수이다.
  • 윈도우 함수는 행과 행 간의 관계를 정의하기 위해서 제공되는 함수이다.
  • GROUPBY 절과 함께 사용할 수 없다. -> PARTITION BY 사용
  • 윈도우 함수를 사용하여 순위, 합계, 평균, 팽 위치 등을 조작할 수 있다.

기본 구조

SELECT 윈도우함수(인수)
OVER(PARTITION BY 칼럼
    ORDER BY WINDOWING 절)
    FROM 테이블명 ;

윈도우 함수 구조

구조 설명
ARGUMENTS(인수) 윈도우 함수에 따라 0~N개의 인수를 설정
PARTITION BY 전체 집한을 기준에 의해 소그룹으로 나눔
ORDER BY 정렬
WINDOWING 행 기준의 범위를 정함

WINDOWING

구조 설명
ROWS 부분집합인 왼도우 크기를 물리적 단위로 행의 지합을 지정
RANGE 논리적인 주소에 의해 행 집합을 지정
BETWEEN ~AND 윈도우의 시작과 끝을 정의
UNBOUNDED PRECEDING 윈도우의 시작 위치가 첫 번째 행임을 의미
UNBOUNDED FOLLOWING 윈도우의 마지막 위치가 마지막 행임을 의미
CURRENT ROW 윈도우 시작 위치가 현재 행임을 의미
SELECT 칼럼명,칼럼명,
SUM(칼럼명) OVER (ORDER BY 칼럼명
              ROWS BETWEEN UNBOUNDED PRECEDING 
              AND UNBOUNDED FOLLOWING) 별칭
              FROM 테이블;
	      
-- 첫번째 행을 뜻하는 UNBOUNDED PRECEDING 에서 
-- 마지막 행을 뜻하는 UNBOUNDED FOLLOWING 의 값을 가져온다.

-- 누적합계

SELECT 칼럼명,칼럼명,
SUM(칼럼명) OVER (ORDER BY 칼럼명
              ROWS BETWEEN UNBOUNDED PRECEDING 
              AND CURRENT ROW) 별칭
              FROM 테이블;
              
-- 첫 번째 행부터 현재행까지의 합계를 구함으로서 누적 합계를 구현한다.

순위 함수

  • 윈도우 함수는 특정 항목과 파티션에 대해서 순위를 계산할 수 있는 함수를 제공한다.

순위 관련 윈도우 함수

순위 함수 설명
RANK 순위를 계산하며 동일 순위는 동일 값을 부여한다.
DENSE_RANK 동일한 순위를 하나의 건수로 계산한다.
ROW_NUMBER 동일한 순위에 고유의 순위를 부여한다.

집계 함수

집계 함수 설명
SUM 합계 계산
AVG 평균 계산
COUNT 행 수 계산
MAX & MIN 최댓값과 최솟값 계산

행 순서 관련 함수

  • 행 순서 관련 함수는 상위 행의 값을 하위에 출력하거나 하위 행의 값을 상위 행에 출력할 수 있다.
  • 특정 위치의 행을 출력할 수 있다.
행 순서 설명
FIRST_VALUE -파티션에서 가장 처음에 나오는 값을 구한다.
-MIN 함수와 같은 결과
LAST_VALUE -파티션에서 가장 나중에 나오는 값을 구한다.
-MAX 함수와 같은 결과
LAG 이전 행
LEAD 특정 위치 행을 가져옴

비율 관련 함수

  • 비율 관련 함수는 누적 백분율, 순서별 백분율, 파티션을 N분으로 분할한 결과 등을 조회할 수 있다.
비율 함수 설명
CUME_DIST 현재 행 이하인 건수에 대한 누적 백분율을 조회
누적 분포상에 0~1의 값을 가짐
PERCENT_RANK 제일먼저 나온 것을 0 제일 늦게 나온 것을 1 로 하여 값이 아닌 행의 순서별 백분율 조회
NTILE 전체 건수를 ARGUMENT 값으로 N 등분한 결과 조회
RATIO_TO_REPORT 전체 SUM에 대한 행 별 칼럼값의 백분율을 소수점까지 조회한다.

테이블 파티션

  • 파티션은 대용량의 테이블을 여러 개의 데이터 파일에 분리해서 저장
  • 물리적으로 분리된 데이터 파일에 저장함으로서 입력, 수정, 삭제, 조회 성능 향상
  • 파티션 별로 백업 복구도 가능하며 인덱스도 생성 가능하다. 즉 독립적임
  • 테이블 스페이스 간에 이동 가능
  • 조회 범위를 줄일 수 있음

RANGE PARTITION

  • 값의 범위를 기준으로 여러 개의 파티션으로 데이터를 나누어 저장하는 것

EX) 연봉이 3000만원이하인 사람과 초과인 사람으로 파티션을 나눔

LIST PARTITION

  • 특정 값을 기준으로 분할 하는 방법

EX) 부서가 개발부서인 사람들과 인사과인 사람들로 파티션을 나눔

HASH PARTITION

  • DBMS가 내부적으로 해시 함수를 사용해서 데이터를 분할함
  • 즉 사용자가 아닌 DBMS가 알아서 분할하고 관리하는 것

파티션 인덱스

  • 4가지 유형의 파티션 인덱스가 존재
구분 주요 내용
Globla index 여러개의 파티션에서 하나의 인덱스를 사용
Local index 해당 파티션 별로 각자의 인덱스 사용
Prefixed index 파티션 키와 인덱스 키 동일
Non prefixed index 파티션 키와 인덱스 키 다름

댓글남기기