2017-09-29 3 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 모두 세 번 발생

SELECT mode(x) FROM atab; 

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

때문에,하지만 a 종류의 어휘 z 전에 : 테이블 atab에서

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

처럼 다음을 얻을 것이다.

+0

환상적인 설명 감사. 뒤늦은 지혜의 도움으로 기능의 목적이 이름으로 표시되었습니다. –