2017-09-29 12 views
1

PostgreSQLでバックエンドされたレガシーアプリケーションのコードを実行しています(PGバージョン9.1と思われます)。PostgreSQL - カスタム集計関数

私はこの機能に出くわした - 私は、カスタム集計のためだと思いますが、それが何をしているかを理解していない:

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

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

は、誰もが機能が何をしているか説明できますか?

答えて

3

この集約関数は、最も頻繁に発生する要素を返します。同じ要素がさらに頻繁に発生する場合は、最初にソートする要素を使用して結合します。 az両方が3回発生

SELECT mode(x) FROM atab; 

mode 
------ 
    a 
(1 row) 

ので、しかしa種類の字句z前:表atab

x 
--- 
a 
z 
q 
a 
b 
a 
z 
z 

のように次のようになります。

+0

すてきな説明ありがとうございます。知覚の恩恵を受けて、機能の目的は名前によって示されました;)! –