集約モードに等しい値の数を計算する必要があるため、値が 6,7,7,7,8 の場合、モードは 7 で、modal_count は 3、modal_share は 3/5 です。
集計関数としてモーダル カウントまたはモーダル シェアが必要です。
モード関数を変更してモーダル カウントを取得しようとしましたが、int が小さすぎるというエラーが発生します
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
);
正常に実行されますが、呼び出すと取得されます
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
どんなアイデアでも大歓迎です