我需要一个聚合函数在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