在 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
我需要 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