집계 함수Postgres상태 값and상태 전환 기능. 즉, 골재는 정의 될 수 있습니다 입력 항목이있을 때마다 수정 된 상태 약관 가공. 새로운 집계 함수를 정의하기 위해 a를 선택합니다 상태 값에 대한 데이터 타입, 상태의 초기 값 및 상태 전환 기능. 상태 전환 기능은입니다 외부에서도 사용할 수있는 일반적인 기능 만 집계의 맥락. 에이최종 기능원하는 출력이있는 경우에도 지정할 수 있습니다. 집계는 보관 해야하는 데이터와 다릅니다. 실행 상태 가치.
따라서, 입력 및 결과 데이터 타입 외에 집계의 사용자, 내부 상태 가치 데이터 유형이 있습니다. 입력 및 결과 유형과 다를 수 있습니다.
최종 기능을 사용하지 않는 집계를 정의하면 우리는 각 행에서 열 값. "Sum"은 이런 종류의 예입니다 골재. "Sum"은 0에서 시작하여 항상 현재 행을 추가합니다. 런닝 총계에 대한 가치. 예를 들어, 합계를 만들고 싶다면 복소수에 대한 데이터 유형에서 작업하기 위해 해당 데이터 유형의 추가 기능. 집계 정의 이다:
집계 complex_sum 만들기 ( sfunc = complex_add, BaseType = Complex, stype = complex, initcond = '(0,0)' ); test_complex에서 complex_sum (a)을 선택하십시오. +------------+ | complex_sum | +------------+ | (34,53.9) | +-----------+(실제로 우리는 집계 "합"을 지명하고 의지입니다.Postgres어떤 종류를 파악하려면 복잡한 열에 적용 할 합계.)
"sum"의 위의 정의는 0을 반환합니다 (이니셜 상태 조건) NULL 입력 값이없는 경우. 아마도 우리는 대신 NULL을 반환하고 싶습니다 --- 토토 꽁 머니92는 기대합니다. 그렇게 행동하는 "합". 우리는 단순히 그것을 생략하여 이것을 할 수 있습니다 "initcond"문구, 초기 상태 조건이 무효가되도록합니다. 일반적으로 이것은 sfunc이 확인해야한다는 것을 의미합니다. 널 상태 조건 입력이지만 "합"및 기타 간단한 "max"및 "min"과 같은 집계는 상태 변수에 대한 첫 번째 비 널 입력 값을 시작한 다음 시작합니다. 두 번째 비 널 입력에서 전환 기능을 적용합니다 값.Postgres그렇게 할 것입니다 초기 조건이 null이고 전환이 자동으로 함수는 "엄격한"으로 표시되어 있습니다 (즉, NULL을 요구하지 않아야합니다. 입력).
"엄격한"전환에 대한 또 다른 기본 동작 기능은 이전 상태 값이 변경되지 않은 상태로 유지된다는 것입니다. 널 입력 값이 발생할 때마다. 따라서 널은 있습니다 무시했습니다. 널 입력을 위해 다른 동작이 필요한 경우 전환 기능을 비 스트릭으로 정의하고 코딩하십시오. 널 입력을 테스트하고 필요한 모든 것을 수행하십시오.
"평균"은 집계의 더 복잡한 예입니다. 그것 실행 상태 두 가지가 필요합니다 : 입력의 합 및 입력 수의 수. 최종 결과가 얻어집니다 이 수량을 나누어서. 평균은 일반적으로 구현됩니다 2 요소 배열을 전이 상태 값으로 사용합니다. 을 위한 예를 들어, 내장 구현avg (float8)모양 :
골재 생성 AVG ( sfunc = float8_accum, BaseType = float8, stype = float8 [], finalfunc = float8_avg, initcond = '0,0' );
자세한 내용은 참조생성 골재inPostgre토토 꽁 머니 사용자 가이드.