제 5절 그룹함수

1. 데이터 분석 개요

데이터 분석 함수

총합, 평균 등의 데이터 분석을 위해서는 복수 행 기준의 데이터를 모아서 처리하는 것을 목적으로 하는 다중행 함수이다.

  • 특성

    • 단일행을 기반으로 산출하지 않고 복수행을 그룹별로 모아 놓고 그룹당 단일 계산 결과를 반환
    • GROUP BY 구문을 사용해 복수행을 그룹핑
    • SELECT, HAVING, ORDER BY 등의 구문에 활용
  • ANSI/ISO SQL 표준은 데이터 분석을 위해 다음 세가지 함수를 정의한다.

함수설명종류
집계함수(Aggregate Function)여러 행 또는 테이블 전체 행으로부터 하나의 결괏값을 반환하는 함수COUNT, SUM, AVG, MAX, MIN, STDDEV, VARIAN
그룹함수(Group Function)소그룹 간의 소계 및 중계 등의 중간 합계 분석 데이터를 산출하는 함수ROLLUP, CUBE, GROUPING SETS
윈도함수(Window Function)데이터베이스를 사용한 온라인 분석 처리 용도로 사용하기 위해서 표준 SQL에 추가된 기능순위함수, 행순서 함수, 그룹 내 비율 함수

2. 집계 함수

여러 행 또는 테이블 전체 행으로부터 하나의 결괏값을 반환하는 함수

  • 집계 함수 구문
SELECT 컬럼1, 컬럼2, ..., 집계함수
FROM 테이블명
[WHERE 조건]
GROUP BY 컬럼1, 컬럼2, ...
[HAVING 조건식(집계함수 포함)]
  • GROUP BY 에서 주의할 점
    • NULL 값은 제외하고 산출한다.
    • SELECT 절에서 처럼 ALIAS 사용이 불가하다.
    • 집계함수 구문을 사용할 수 없다.

집계함수는 NULL이 포함된 경우 없는 데이터로 판단한다.

3. 그룹 함수

테이블의 전체 행을 하나 이상의 컬럼을 기준으로 컬럼 값에 따라 그룹화하여 그룹별로 결과를 출력하는 함수

3.1 ROLLUP 함수

  • ROLLUP 에 의해 지정된 컬럼은 소계(소그룹의 합계) 등 중간 집계 값을 산출하기 위한 그룹 함수이다.
  • 지정 컬럼 수보다 하나 더 큰 레벨만큼의 중간 집계 값이 생성된다.
  • ROLLUP의 지정 컬럼은 계층별로 구성되기 때문에 순서가 바뀌면 수행 결과가 바뀐다.
SELECT 컬럼1, 컬럼2, ..., 집계 함수
FROM 테이블명
[WHERE ...]
GROUP BY [컬럼...] ROLLUP 컬럼
[HAVING ...]
[ORDER BY ...]

SELECT 뒤에 포함되는 컬럼이 GROUP BY 또는 ROLLUP 뒤에 기재되어야 한다.

  • 예시
SELECT DEPT, JOB, SUM(SALARY)
FROM DEPT_SALARY
GROUP BY ROLLUP(DEPT, JOB);

3.2 CUBE 함수

  • CUBE는 결합 가능한 모든 값에 대해 다차원 집계를 생성하는 그룹 함수 이다.
  • 연산이 많아 시스템에 부담을 준다.
SELECT 컬럼1, 컬럼2, ..., 집계 함수
FROM 테이블명
[WHERE ...]
GROUP BY [컬럼...] CUBE(컬럼명 a, ..)
[HAVING ...]
[ORDER BY ...]

3.3 GROUPING SETS 함수

  • 집계 대상 컬럼들에 대한 개별 집계를 구할 수 있으며, ROLLUP이나 CUBE와는 달리 컬럼 간 순서와 무관한 결과를 얻을 수 있는 그룹함수이다.
  • 다양한 소계 집합을 만들 수 있다.
  • ORDER BY를 사용해서 집계 대상 그룹과의 표시 순서를 조정하여 체계적으로 보여줄 수 있다.
  • 계층구조와 달리 인수들이 평등한 관계라 순서에 상관없이 동일한 결과를 볼 수 있다.
SELECT 컬럼1, 컬럼2, ..., 집계 함수
FROM 테이블명
[WHERE ...]
GROUP BY [컬럼...] GROUPING SETS(컬럼명 a, ..)
[HAVING ...]
[ORDER BY ...]
  • GROUPINT SETS 함수 사용시 UNION ALL을 사용한 일반 그룹함수를 사용한 SQL과 같은 결과를 얻을 수 있으며, 괄호로 묶은 집합 별로 집계를 구할 수 있다.
  • GROUPING SETS의 경우 일반 그룹함수를 이용한 SQL과 결과 데이터는 같으나 행들의 정렬 순서는 다를 수 있다.

좋은 웹페이지 즐겨찾기