0

我需要计算等于聚合模式的值的数量,因此对于值 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

任何想法表示赞赏

4

1 回答 1

1

count(*) 返回一个 bigint,这是最终函数返回的类型(而不是“RETURNS anyelement AS”使用“RETURNS bigint AS”)。

于 2013-10-24T15:29:22.263 回答