집합 생성이름 ( input_data_type[ , ... ] ) (
SFUNC =sfunc,
유형 =state_data_type[ , 최종 기능 =ffunc]
[ , INITCOND =초기_조건]
[ , 정렬 =sort_operator]
)
또는 이전 구문
집계 생성이름(
기본 유형 =기본_유형,
SFUNC =sfunc,
유형 =state_data_type[ , 최종 기능 =ffunc]
[ , INITCOND =초기_조건]
[ , 정렬 =sort_operator ]
)
집합 생성새로운 것을 정의합니다 집계 함수. 일부 기본적이고 일반적으로 사용되는 집계 기능은 배포판에 포함되어 있습니다. 그들은 문서화되어 있습니다 에서PostgreSQL : 문서 : 8.2 : 롤 토토 함수. 하나라면 새로운 유형을 정의하거나 아직 집계 함수가 필요하지 않습니다. 제공된 다음집합 생성될 수 있습니다 원하는 기능을 제공하는 데 사용됩니다.
스키마 이름이 제공된 경우(예:집합 myschema.myagg 생성 ...) 그런 다음 지정된 스키마에 집계 함수가 생성됩니다. 그렇지 않으면 현재 스키마에서 생성됩니다.
집계 함수는 이름과 입력 데이터로 식별됩니다. 유형. 동일한 스키마에 있는 두 개의 집계는 동일한 이름을 가질 수 있습니다. 다른 입력 유형에서 작동하는 경우. 이름 및 입력 데이터 집계 유형도 이름과 구별되어야 하며 동일한 함수에 있는 모든 일반 함수의 입력 데이터 유형 스키마.
토토 함수는 하나 또는 두 개의 일반 함수로 구성됩니다. 함수: 상태 전환 함수sfunc및 선택적 최종 계산 기능ffunc. 이들은 다음과 같이 사용됩니다. 다음과 같습니다:
sfunc( 내부 상태, 다음 데이터 값 ) --- 다음 내부 상태ffunc( 내부 상태 ) --- 토토 값
PostgreSQL을 생성합니다 데이터 유형의 임시 변수stype현재 내부 상태를 유지하기 위해 집계. 각 입력 행에서 집계 인수 값 계산되고 상태 전이 함수가 호출됩니다. 현재 상태 값과 새 인수 값 새로운 내부 상태 값을 계산합니다. 모든 행이 끝난 후 처리되면 마지막 함수가 한 번 호출되어 계산됩니다. 집계의 반환 값입니다. 최종 기능이 없다면 종료 상태 값은 그대로 반환됩니다.
집계 함수는 다음과 같은 초기 조건을 제공할 수 있습니다. 는 내부 상태값의 초기값이다. 이것은 유형의 값으로 데이터베이스에 지정되고 저장됩니다.텍스트, 그러나 유효한 외부 주소여야 합니다. 상태 값 데이터 유형의 상수 표현. 그렇다면 제공되지 않으면 상태 값이 null로 시작됩니다.
상태 전환 함수가 선언된 경우"엄격", null로 호출할 수 없습니다.
입력. 이러한 전환 함수를 사용하면 집계 실행이
다음과 같이 행동합니다. Null 입력 값이 있는 행은 무시됩니다.
(함수는 호출되지 않으며 이전 상태 값은
유지됨). 초기 상태 값이 null이면 처음에는
모두 Null이 아닌 입력 값이 있는 행, 첫 번째 인수 값
상태 값을 대체하고 전환 함수가 호출됩니다.
모두 Null이 아닌 입력 값이 있는 후속 행에서. 이것은 편리하다
다음과 같은 집계를 구현하기 위해최대. 이 동작은
언제state_data_type동일합니다
처음으로input_data_type.
이러한 유형이 다른 경우 null이 아닌 이니셜을 제공해야 합니다.
조건을 지정하거나 엄격하지 않은 전환 기능을 사용하세요.
상태 전환 기능이 엄격하지 않으면 각 입력 행에서 무조건 호출되며 다음을 처리해야 합니다. null 입력 및 null 전환 값. 이를 통해 집계 작성자는 집계에 대한 모든 권한을 갖습니다. null 값을 처리합니다.
최종 함수가 선언된 경우"엄격", 그러면 호출되지 않습니다.
종료 상태 값이 null입니다. 대신 null 결과는 다음과 같습니다.
자동으로 반환됩니다. (물론 이건 그냥 평범한 얘기다.
엄격한 함수의 동작.) 어쨌든 최종 함수는
null 값을 반환하는 옵션. 예를 들어, 최종
함수평균다음의 경우 null을 반환합니다.
입력 행이 0개인 것으로 확인됩니다.
다음과 같이 동작하는 집계MIN또는MAX때때로 최적화될 수 있음
모든 입력 행을 스캔하는 대신 인덱스를 조사합니다. 만약에
이 집계는 매우 최적화될 수 있으므로 다음을 지정하여 표시하십시오.정렬 연산자. 기본 요구 사항은
토토는 정렬의 첫 번째 요소를 생성해야 합니다.
운영자에 의해 유도된 주문; 즉
탭에서 agg(col) 선택;
다음과 동일해야 합니다.
탭에서 열 선택 ORDER BY 열 USING sortop LIMIT 1;
추가 가정은 토토가 null을 무시한다는 것입니다.
입력이 있는 경우에만 null 결과를 제공합니다.
null이 아닌 입력이 없습니다. 일반적으로 데이터 유형은<연산자는 다음에 대한 적절한 정렬 연산자입니다.MIN및다음에 적합한 정렬 연산자입니다.MAX. 최적화는 결코 이루어지지 않습니다.
지정된 연산자가 다음이 아니면 실제로 적용됩니다."미만"또는"보다 큼"B-트리 인덱스의 전략 멤버
연산자 클래스.
집합의 이름(선택적으로 스키마 한정) 생성하는 함수입니다.
이 토토 함수가 사용되는 입력 데이터 유형
운영합니다. 인수가 없는 토토 함수를 생성하려면,
쓰다*목록 대신
입력 데이터 유형. (이러한 집계의 예는 다음과 같습니다.개수(*).)
이전 구문에서는만들기 토토, 입력 데이터 유형은 다음으로 지정됩니다.기본 유형매개변수가 아닌 집계 이름 옆에 기록됩니다. 참고하세요 구문에서는 하나의 입력 매개변수만 허용합니다. 정의하려면 인수가 없는 집계 함수, 다음을 지정하세요.기본 유형as"아무거나"(아님*).
호출할 상태 전환 함수의 이름 각 입력 행에 대해. 에 대한N-인수 토토 함수, thesfunc반드시 취해야 함N+1 인수, 첫 번째는 유형state_data_type그리고 나머지는 선언된 입력 데이터 유형과 일치합니다. 토토. 함수는 유형의 값을 반환해야 합니다.state_data_type. 이 함수는 현재 상태 값과 현재 데이터 값을 입력하고, 다음 상태 값을 반환합니다.
토토의 상태 값에 대한 데이터 유형입니다.
다음을 계산하기 위해 호출된 최종 함수의 이름 모든 입력 행이 완료된 후 집계 결과 횡단했다. 함수는 다음 유형의 단일 인수를 사용해야 합니다.state_data_type. 반환 집계의 데이터 유형은 다음의 반환 유형으로 정의됩니다. 이 기능. 만일ffunc입니다 지정되지 않은 경우 종료 상태 값이 집계 결과이며 반환 유형은 다음과 같습니다.state_data_type.
상태 값의 초기 설정입니다. 이는 다음과 같아야 합니다. 데이터 유형에 허용되는 형식의 문자열 상수state_data_type. 그렇지 않은 경우 지정하면 상태 값은 null로 시작됩니다.
a에 대한 관련 정렬 연산자MIN- 또는MAX-같은 집합체. 이것은 단지
연산자 이름(스키마 한정). 운영자는
집계와 동일한 입력 데이터 유형을 갖는 것으로 가정됩니다.
(단일 인수 집계여야 함).
매개변수집합 생성그림의 순서뿐만 아니라 어떤 순서로도 쓸 수 있습니다. 위.