在 postgresql 中创建自定义聚合函数

Create a custom aggregate function in postgresql

我需要 postgresql 中的聚合函数,returns 文本列的最大值,其中最大值不是按字母顺序而是按字符串的长度计算的。

谁能帮帮我?

自定义聚合由两部分组成:执行工作的函数和聚合函数的定义。

所以我们首先需要一个函数 returns 两个字符串中较长的一个:

create function greater_by_length(p_one text, p_other text)
  returns text
as
$$ 
  select case 
           when length(p_one) >= length(p_other) then p_one
           else p_other
         end
$$
language sql
immutable;

然后我们可以使用该函数定义聚合:

create aggregate max_by_length(text)
(
  sfunc = greater_by_length,
  stype = text
);

并使用它:

select max_by_length(s)
from (
  values ('one'), ('onetwo'), ('three'), ('threefourfive')
) as x(s);  

  

returns threefourfive