2013-10-24 2 views
0

총계 모드 과 같은 값의 수를 계산해야합니다. 따라서 값 6,7,7,7,8의 경우 모드가 7이고 modal_count가 3이고 modal_share가 3/5입니다.Postgresql : 모달 공유 집계 함수

집계 함수로 모달 수 또는 모달 공유가 필요합니다.

나는 모달 수를 제공하기 위해 모드 기능을 수정했지만, 나는

CREATE OR REPLACE FUNCTION _final_mode_count(anyarray) 
    RETURNS anyelement AS 
$BODY$ 
    SELECT COUNT(*) 
    FROM unnest($1) a 
    GROUP BY a 
    ORDER BY COUNT(1) DESC, a 
    LIMIT 1; 
$BODY$ 
LANGUAGE 'sql' IMMUTABLE; 

-- Tell Postgres how to use our aggregate 
CREATE AGGREGATE mode_count(anyelement) (
    SFUNC=array_append, --Function to call for each row. Just builds the array 
    STYPE=anyarray, 
    FINALFUNC=_final_mode_count, --Function to call after everything has been added to array 
    INITCOND='{}' --Initialize an empty array when starting 
); 

실행합니다 미세 너무 작은 존재하는 int에 대한 오류를 얻고있다,하지만 난 그것을 호출 할 때 나는

FEHLER: Rückgabetyp von Funktion stimmt nicht überein; deklariert als integer 
DETAIL: Eigentlicher Rückgabetyp ist bigint. 
CONTEXT: SQL-Funktion „_final_mode_share“ beim Start 
********** Error ********** 

FEHLER: Rückgabetyp von Funktion stimmt nicht überein; deklariert als integer 
SQL state: 42P13 
Detail: Eigentlicher Rückgabetyp ist bigint. 
Context: SQL-Funktion „_final_mode_share“ beim Start 
를 얻을 수

어떤 아이디어라도 감사 할 것입니다.

답변

1

count (*)는 bigint를 반환합니다.이 함수는 최종 함수의 반환 값의 형식을 반환합니다 ("anyelement AS"대신 "RETURNS bigint AS"사용).

+0

감사합니다. 스택에 오신 것을 환영합니다, 더 많은 postgres 사용자가 들어 오기를 기쁘게 생각합니다 :) – AdrianBR

+1

Thanks! 드디어 시간이 좀 걸리는 긴 시간 lurker : – yieldsfalsehood