지원되지 않는 버전 :7.0 / 6.5 / 6.4
이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다현재버전 또는 위에 나열된 다른 지원되는 버전 중 하나입니다.

41 장 확장SQL: 골재

배트맨 토토 함수Postgres상태 값상태 전환 기능. 즉, an 집계는 수정 된 상태로 정의 될 수 있습니다. 입력 항목이 처리 될 때마다. 새로운 집계를 정의합니다 함수, 하나는 상태 값에 대한 데이터 유형을 선택하고 초기 상태의 가치 및 상태 전환 기능. 국가 전환 기능은 집계의 맥락 외부에서 사용됩니다.

실제로 유용한 구성을보다 쉽게 ​​만들기 위해 기존 함수와 함께 집계는 집계가 하나를 가질 수 있습니다. 두 개의 개별 상태 값, 하나 또는 두 개의 전환 기능 해당 상태 값을 업데이트하고 A최종 기능는 실제 배트맨 토토 결과를 계산합니다 결말 상태 가치.

따라서 4 개의 데이터 유형이 포함될 수 있습니다. 입력 데이터 항목, 집계 결과의 유형 및 두 상태 값의 유형. 입력과 결과 만 데이터 유형은 집계 사용자가 나타납니다.

일부 상태 전환 기능은 각 연속을 살펴 봐야합니다. 다음 상태 값을 계산하기위한 입력, 다른 사람들은 특정 입력 값과 간단히 내부 상태를 업데이트하십시오. (그만큼 두 번째 종류의 가장 유용한 예는 입력 항목 수.)Postgres배트맨 토토 기계 정의sfunc1함수로 집계의 경우 이전 상태 값과 현재 입력이 전달됩니다. 가치, whilesfunc2이전 상태 가치 만 전달됩니다.

만 사용하는 배트맨 토토를 정의하는 경우sfunc1, 우리는 a를 계산하는 집계가 있습니다 각 인스턴스에서 속성 값의 실행 기능. "합집합" 이런 종류의 집계의 예입니다. "합"은 0에서 시작합니다 항상 현재 인스턴스의 값을 실행 총계에 추가합니다. 을 위한 예를 들어, 데이터 유형에서 작업하기 위해 합계를 만들고 싶다면 복소수의 경우 추가 기능 만 필요합니다. 데이터 유형. 집계 정의는 다음과 같습니다.

집계 complex_sum 만들기 (
    sfunc1 = complex_add,
    BaseType = Complex,
    stype1 = complex,
    initcond1 = '(0,0)'
);

test_complex에서 complex_sum (a)을 선택하십시오.

         +------------+
         | complex_sum |
         +------------+
         | (34,53.9) |
         +-----------+
(실제로 우리는 배트맨 토토 "합"으로 이름을 지정하고 의존합니다Postgres어떤 종류를 파악하려면 복잡한 열에 적용 할 합계.)

만 정의하면sfunc2, 우리는입니다 실행중인 작동 함수를 계산하는 배트맨 토토를 지정합니다. 각 인스턴스의 속성 값과 무관합니다. "카운트"입니다 이런 종류의 배트맨 토토의 가장 일반적인 예. "카운트"가 시작됩니다 0에서 각 인스턴스에 대해 1 개를 추가합니다. 인스턴스 값을 무시합니다. 여기에서 우리는 내장을 사용합니다int4inc우리를 위해 일하는 일상. 이것 일상적인 증가 (하나에 추가) 인수.

배트맨 토토 생성 my_count (
    sfunc2 = int4inc, - 하나를 추가하십시오
    BaseType = int4,
    stype2 = int4,
    initcond2 = '0'
);

emp에서 emp_count로 my_count (*)를 선택하십시오.

         +----------+
         | emp_count |
         +----------+
         | 5 |
         +----------+

"평균"은 둘 다 필요한 배트맨 토토의 예입니다. 실행중인 합계와 계산하는 함수를 계산하는 함수 런닝 카운트. 모든 인스턴스가 처리되면 배트맨 토토에 대한 최종 답변은 달리기 합계가 런닝 카운트. 우리는를 사용합니다.int4plandint4inc이전에 사용한 루틴 뿐만 아니라Postgres정수 부서 루틴,int4div, 계산 카운트에 의한 합계의 분할.

배트맨 토토 생성 my_average (
    sfunc1 = int4pl, - sum
    BaseType = int4,
    stype1 = int4,
    sfunc2 = int4inc, - count
    stype2 = int4,
    finalfunc = int4div, - 부서
    initcond1 = '0',
    initcond2 = '0'
);

emp에서 emp_average로 my_average (Salary)를 선택하십시오.

         +------------+
         | emp_average |
         +------------+
         | 1640 |
         +-----------+

자세한 내용은 참조배트맨 토토 생성inPostgreSQL 사용자 안내서.