이 문서는 지원되지 않는 Postgre토토 꽁 머니 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.범퍼카 토토 PostgreSQL : 문서 : 17 : 36.12. 사용자 정의 골재버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

16장. 확장토토 꽁 머니: 집계

집계 함수포스트그레다음과 같이 표현됩니다상태 값그리고상태 전환 기능. 즉, 집계는 다음과 같이 정의될 수 있습니다. 입력 항목이 바뀔 때마다 수정되는 상태 조건 처리됨. 새로운 집계 함수를 정의하려면 다음을 선택합니다. 상태 값의 데이터 유형, 상태의 초기 값, 상태 전이 기능. 상태 전이 함수는 다음과 같습니다. 외부에서도 사용할 수 있는 일반적인 기능입니다. 집계의 맥락. 갑최종 기능또한 원하는 출력이 필요한 경우 지정할 수 있습니다. 집계된 데이터가 보관해야 하는 데이터와 다릅니다. 실행 상태 값입니다.

따라서 다음에서 볼 수 있는 입력 및 결과 데이터 유형 외에도 집계 사용자에게는 내부 상태 값 데이터 유형이 있습니다. 입력 및 결과 유형과 다를 수 있습니다.

최종 함수를 사용하지 않는 집계를 정의하면, 우리는 다음의 실행 함수를 계산하는 집계를 가지고 있습니다. 각 행의 열 값입니다. "Sum"은 이런 종류의 예입니다. 집계. "합계"는 0부터 시작하여 항상 현재 행의 값을 더합니다. 가치를 누적 합계로 계산합니다. 예를 들어 Sum을 만들고 싶다면 복소수에 대한 데이터 유형에 대해 작업하려면 집계만 필요합니다. 해당 데이터 유형에 대한 추가 기능. 집계 정의 다음과 같습니다:

집합 complex_sum 생성(
    sfunc = complex_add,
    기본 유형 = 복합,
    유형 = 복합,
    initcond = '(0,0)'
);

SELECT complex_sum(a) FROM test_complex;

         +------------+
         |복합체_합 |
         +------------+
         |(34,53.9) |
         +------------+
(실제로는 집계 이름을 "sum"으로 지정하고 다음을 사용합니다.포스트그레스어떤 종류인지 알아내기 위해 복잡한 열에 적용할 합계입니다.)

위의 "합계" 정의는 0을 반환합니다(초기 상태 조건) null이 아닌 입력 값이 없는 경우. 아마도 대신에 우리는 NULL을 반환하고 싶습니다 --- 토토 꽁 머니92는 그런 식으로 행동하는 "Sum". 간단히 생략하면 이 작업을 수행할 수 있습니다. "initcond" 구문을 사용하여 초기 상태 조건이 NULL이 되도록 합니다. 일반적으로 이는 sfunc가 다음을 확인해야 함을 의미합니다. NULL 상태 조건 입력("Sum" 및 기타 간단한 경우) "Max" 및 "Min"과 같은 집계를 삽입하는 것으로 충분합니다. null이 아닌 첫 번째 입력 값을 상태 변수에 넣은 다음 시작합니다. null이 아닌 두 번째 입력에 전환 함수 적용 값.포스트그레스그러겠습니다 초기 조건이 NULL이고 전환이 발생하면 자동으로 함수는 "엄격"으로 표시됩니다(즉, NULL에 대해 호출되지 않음). 입력).

"엄격한" 전환에 대한 또 다른 기본 동작 기능은 이전 상태 값이 변경되지 않고 유지된다는 것입니다. NULL 입력 값이 발견될 때마다. 따라서 NULL은 무시되었습니다. NULL 입력에 대해 다른 동작이 필요한 경우 전환 함수를 엄격하지 않은 것으로 정의하고 다음과 같이 코딩하세요. NULL 입력을 테스트하고 필요한 모든 작업을 수행합니다.

"평균"은 집계의 더 복잡한 예입니다. 그것 두 가지 실행 상태가 필요합니다. 입력의 합과 입력 개수를 계산합니다. 최종 결과가 얻어집니다 이 수량을 나누어서. 평균은 일반적으로 다음과 같이 구현됩니다. 전환 상태 값으로 요소 2개 배열을 사용합니다. 에 대한 예를 들어, 내장된 구현은평균(float8)다음과 같습니다:

총 평균 생성(
    sfunc = float8_accum,
    기본 유형 = float8,
    유형 = float8[],
    최종 기능 = float8_avg,
    initcond = '0,0'
);

자세한 내용은 참조만들기 집계inPostgre토토 꽁 머니 사용자의 안내.