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



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

谁能帮我一下吗?

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

因此,我们首先需要一个返回两个字符串中较长字符串的函数:
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);  

返回threefourfive

最新更新