2017-09-25 2 views
2

PostgreSQL 집계의 최종 함수에 추가 매개 변수를 전달하여 상태 값에 대한 특수 TYPE을 만드는 유일한 방법은 무엇입니까?PostgreSQL 집계 최종 함수에 추가 매개 변수 전달

예컨대 :

CREATE TYPE geomvaltext AS (
    geom public.geometry, 
    val double precision, 
    txt text 
); 

그리고 세번째 파라미터 (텍스트) 마지막 최종 기능에 도달하도록 한 후, 상태 변수와 유형을 사용하기?

왜 집계는 최종 매개 변수 자체에 추가 매개 변수를 전달할 수 없습니까? 구현 이유는 무엇입니까?

그래서 우리는 쉽게 예를 들어, 방법 복용 집계 만들 수 있습니다 :

SELECT ST_MyAgg(accum_number, 'COMPUTE_METHOD') FROM blablabla 

감사를

답변

0

당신은 마지막 함수 자체를 다시해야하고, 그 경우에 당신이뿐만 아니라 쓰기 수 각각의 가능한 집합에 대해 하나씩 새로운 집계 함수 집합이됩니다. COMPUTE_METHOD. COMPUTE_METHOD이 데이터 값이거나 데이터 값으로 암시 된 경우 CASE 문을 사용하여 적절한 집계 방법을 선택할 수 있습니다. 또는 accum_numberCOMPUTE_METHOD의 필드가있는 사용자 지정 복합 형식을 만들고이 새 데이터 형식을 사용하는 단일 집계 함수를 작성해야 할 수 있습니다.

+0

"COMPUTE_METHOD는"텍스트 매개 변수 최종 함수에서 최종 결과를 계산하는 방법 지정 문제는이 매개 변수를 최종 함수에 전달하는 것입니다. 분명히이 텍스트 매개 변수를 구성하는 새로운 형식을 작성하는 것 이외에는 불가능합니다.이 형식은 지나치게 복잡합니다. – Pierre

1

둘 이상의 매개 변수로 집계를 정의 할 수 있습니다.

그 문제가 해결되는지 모르겠지만,이처럼 사용할 수 있습니다

CREATE OR REPLACE FUNCTION myaggsfunc(integer, integer, text) RETURNS integer 
    IMMUTABLE STRICT LANGUAGE sql AS 
$f$ 
    SELECT CASE $3 
      WHEN '+' THEN $1 + $2 
      WHEN '*' THEN $1 * $2 
      ELSE NULL 
     END 
$f$; 

CREATE AGGREGATE myagg(integer, text) (
    SFUNC = myaggsfunc(integer, integer, text), 
    STYPE = integer 
); 

그것은 다음과 같이 사용할 수는 :

CREATE TABLE mytab 
    AS SELECT * FROM generate_series(1, 10) i; 

SELECT myagg(i, '+') FROM mytab; 

myagg 
------- 
    55 
(1 row) 

SELECT myagg(i, '*') FROM mytab; 

    myagg 
--------- 
3628800 
(1 row) 
+0

요점은 "최종 기능에 추가 매개 변수를 전달하는 방법"입니다. 상태 함수에 전달하는 것은 쉽습니다. – Pierre

+0

이렇게 할 방법이 없으므로 자신 만의 유형을 만들어야합니다. 내 대답은 당신의 본보기에서 영감을 얻었습니다. 해결하려는 문제는 무엇입니까? 어쩌면 최종 함수에 대한 추가 인수보다 간단한 방법이있을 수 있습니다. –