我正在浏览由PostgreSQL提供的遗留应用程序的代码(我认为它是PG版本9.1)。
我遇到过这个函数 - 我想这是自定义聚合,但不明白它在做什么:
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
);
任何人都可以解释这个功能在做什么吗?
答案 0 :(得分:3)
此聚合函数将返回最常出现的元素,如果有更多元素经常出现,则使用首先排序的元素来打破平局。
在表格atab
中
x
---
a
z
q
a
b
a
z
z
您将获得以下内容:
SELECT mode(x) FROM atab;
mode
------
a
(1 row)
因为a
和z
都出现了三次,但a
在词法z
之前排序。