집계 함수

섬네일|(그림 1) 집계의 개체-관계 모델 표현
데이터베이스 관리에서 **집계 함수**() 또는 **결합 함수**()는 여러 값을 함께 처리하여 하나의 요약 통계량을 형성하는 함수이다.

일반적인 집계 함수는 다음과 같다.

* 평균 (즉, 산술 평균)
* 개수 (Count)
* 최댓값
* 중앙값
* 최솟값
* 최빈값
* 범위
* 합

기타 함수는 다음과 같다:

* Nanmean (NaN 값을 무시한 평균, "nil" 또는 "null"로도 알려짐)
* 표준 편차 (Stddev)

형식적으로, 집계 함수는 어떤 입력 도메인 의 집합, 중복집합 (bag) 또는 리스트를 입력으로 받아 출력 도메인 의 요소를 출력한다. 입력 및 출력 도메인은 `SUM`과 같이 동일할 수도 있고, `COUNT`와 같이 다를 수도 있다.

집계 함수는 수많은 프로그래밍 언어, 스프레드시트 및 관계대수에서 흔히 발생한다.

 표준에 정의된 `listagg` 함수는 여러 행의 데이터를 하나의 연결된 문자열로 집계한다.

개체-관계 다이어그램에서 집계는 그림 1과 같이 관계와 그 엔티티 주위에 사각형을 그려 이를 하나의 집계 엔티티로 취급함을 나타낸다.

## 분해 가능한 집계 함수
집계 함수는 모든 입력 값을 한 번에 가져와야 할 가능성이 있기 때문에 병목 현상을 일으킨다. 분산 컴퓨팅에서는 이러한 계산을 더 작은 조각으로 나누고, 대개 분할 정복 알고리즘을 통해 병렬로 계산하여 작업을 분산하는 것이 바람직하다.

일부 집계 함수는 부분 집합에 대한 집계를 계산한 다음, 이러한 집계들을 다시 집계함으로써 계산할 수 있다. 예로는 , , , 이 있다. 다른 경우에는 부분 집합에 대한 보조 숫자를 계산하고, 이 보조 숫자들을 집계한 다음, 마지막에 전체 숫자를 계산하여 집계할 수 있다. 예로는  (합계와 개수를 추적하고 마지막에 나눔)와  (최댓값과 최솟값을 추적하고 마지막에 뺌)가 있다. 그 외의 경우, 한 번에 전체 집합을 분석하지 않고는 집계를 계산할 수 없으나, 어떤 경우에는 근사치를 분산 처리할 수 있다. 예로는  (카운트-디스틴크트 문제), , 가 있다.

이러한 함수를 **분해 가능한 결합 함수**() 또는 **분해 가능한 집계 함수**()라고 한다. 가장 단순한 것은 **자가 분해 결합 함수**()라고 하며, 다음과 같은 병합 연산자 가 존재하는 함수 로 정의된다.
:f(X \uplus Y) = f(X) \diamond f(Y)
여기서 는 중복집합의 합집합이다(모노이드 준동형 사상 참조).

예를 들어, :
:\operatorname{SUM}({x}) = x, 단일 요소인 경우;
:\operatorname{SUM}(X \uplus Y) = \operatorname{SUM}(X) + \operatorname{SUM}(Y), 즉 병합 은 단순히 덧셈이다.
:
:\operatorname{COUNT}({x}) = 1,
:\operatorname{COUNT}(X \uplus Y) = \operatorname{COUNT}(X) + \operatorname{COUNT}(Y).
:
:\operatorname{MAX}({x}) = x,
:\operatorname{MAX}(X \uplus Y) = \max\bigl(\operatorname{MAX}(X), \operatorname{MAX}(Y)\bigr).
:
:\operatorname{MIN}({x}) = x,
:\operatorname{MIN}(X \uplus Y) = \min\bigl(\operatorname{MIN}(X), \operatorname{MIN}(Y)\bigr).

자가 분해 결합 함수는 별도로 적용하여 결합(형식적으로는 곱을 취함)할 수 있으므로, 예를 들어 두 숫자를 추적함으로써 과 를 동시에 계산할 수 있다.

더 일반적으로, **분해 가능한 집계 함수** 는 최종 함수 와 자가 분해 집계 함수 의 합성으로 표현될 수 있는 함수로 정의할 수 있다 (f = g \circ h, f(X) = g(h(X))). 예를 들어,  및 이 있다.

맵리듀스 프레임워크에서 이러한 단계는 InitialReduce(개별 레코드/단일 요소 집합의 값), Combine(두 집계의 이진 병합) 및 FinalReduce(보조 값에 대한 최종 함수)로 알려져 있으며, 셔플 단계 이전으로 분해 가능한 집계를 이동하는 것을 InitialReduce 단계라고 한다.

분해 가능한 집계 함수는 온라인 분석 처리(OLAP)에서 중요하다. 왜냐하면 기본 데이터가 아닌 OLAP 큐브에 미리 계산된 결과에 대해 집계 쿼리를 계산할 수 있게 해주기 때문이다. 예를 들어, OLAP에서 , , , 은 OLAP 큐브의 각 셀에 대해 계산한 다음 요약("롤업")할 수 있으므로 지원하기 쉽지만, 은 모든 뷰에 대해 별도로 계산해야 하므로 지원하기 어렵다.

## 기타 분해 가능한 집계 함수
집계 데이터로부터 평균과 표준 편차를 계산하기 위해서는 각 그룹에 대해 값의 총합 (Σxi = SUM(x)), 값의 개수 (N=COUNT(x)), 값의 제곱의 총합 (Σxi2=SUM(x2))이 필요하다.

`AVG`:
\operatorname{AVG}(X \uplus Y) = \bigl(\operatorname{AVG}(X) * \operatorname{COUNT}(X) + \operatorname{AVG}(Y) * \operatorname{COUNT}(Y)\bigr) / \bigl(\operatorname{COUNT}(X) + \operatorname{COUNT}(Y)\bigr)
또는
\operatorname{AVG}(X \uplus Y) = \bigl(\operatorname{SUM}(X) + \operatorname{SUM}(Y)\bigr) / \bigl(\operatorname{COUNT}(X) + \operatorname{COUNT}(Y)\bigr)
또는, 오직 COUNT(X)=COUNT(Y)인 경우에만
\operatorname{AVG}(X \uplus Y) = \bigl(\operatorname{AVG}(X) + \operatorname{AVG}(Y)\bigr) / 2

`SUM(x<sup>2</sup>)`:
값의 제곱의 합은 그룹의 표준 편차를 계산하는 데 중요하다.
\operatorname{SUM}(X^2 \uplus Y^2) = \operatorname{SUM}(X^2)+\operatorname{SUM}(Y^2)

`STDDEV`:
모든 지점에서 동일한 확률을 갖는 유한 모집단의 경우, 다음을 얻는다.
\operatorname{STDDEV}(X) = s(x) = \sqrt{\frac{1}{N}\sum_{i=1}^N(x_i-\overline{x})^2} = \sqrt{\frac{1}{N} \left(\sum_{i=1}^N x_i^2\right) - (\overline{x})^2}
= \sqrt{\operatorname{SUM}(x^2)  / \operatorname{COUNT}(x) - \operatorname{AVG}(x) ^2}


이는 표준 편차가 값의 제곱의 평균과 평균값의 제곱 사이의 차이의 제곱근과 같음을 의미한다.
\operatorname{STDDEV}(X \uplus Y) = \sqrt{\operatorname{SUM}(X^2 \uplus Y^2)  / \operatorname{COUNT}(X \uplus Y) - \operatorname{AVG}(X \uplus Y) ^2}
\operatorname{STDDEV}(X \uplus Y) = \sqrt{\bigl(\operatorname{SUM}(X^2)+\operatorname{SUM}(Y^2)\bigr) / \bigl(\operatorname{COUNT}(X) + \operatorname{COUNT}(Y) \bigr) - \bigl((\operatorname{SUM}(X) + \operatorname{SUM}(Y)) / (\operatorname{COUNT}(X) + \operatorname{COUNT}(Y))\bigr)^2}

## 같이 보기
* 분할표
* 데이터 드릴링
* 데이터 마이닝
* 데이터 처리
* 추출, 변환, 적재
* Fold (고차 함수)
* OLAP 큐브
* 온라인 분석 처리
* 피벗 테이블
* 관계대수 (데이터베이스 이론)
* 맵리듀스

## 각주

## 참고 문헌
*
* Oracle Aggregate Functions: MAX, MIN, COUNT, SUM, AVG Examples

* 
* 
* 

## 외부 링크
* Aggregate Functions (Transact-SQL)

분류:함수 (프로그래밍)