SQLクエリを使用しています
SELECT round(avg(int_value)) AS modal_value FROM t;
モーダル値を取得することは、もちろん正しいことではありませんが、何らかの結果を表示するための最初のオプションです。
だから、私の質問は、「どうすれば正しいことをするのですか?」です。
PostgreSQL 8.3+では、このユーザー定義の集計を使用してmodeを定義できます。
CREATE FUNCTION _final_mode(anyarray) RETURNS anyelement AS $f$
SELECT a FROM unnest($1) a
GROUP BY 1 ORDER BY COUNT(1) DESC, 1
LIMIT 1;
$f$ LANGUAGE 'sql' IMMUTABLE;
CREATE AGGREGATE mode(anyelement) (
SFUNC=array_append, STYPE=anyarray,
FINALFUNC=_final_mode, INITCOND='{}'
);
ただし、ユーザー定義の平均として、大きなテーブルでは遅くなる可能性があります (合計/カウントを組み込みの AVG 関数と比較してください)。 PostgreSQL 9 以降では、統計モード値を計算するための直接 (組み込み) 関数はありませんか? おそらく使用pg_stats
...のようなことをする方法
SELECT (most_common_vals(int_value))[1] AS modal_value FROM t;
pg_stats VIEW はこの種のタスクに使用できますか (1 回でも手動で) ?