我需要计算等于聚合模式的值的数量,因此对于值 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
任何想法表示赞赏