0

编写一个聚合来计算数字 40 在列中出现的次数。

使用您的聚合来计算目录表中 40 岁的人数。

这就是我正在做的事情:

Create function aggstep(curr int) returns int as $$
begin
    return curr.count where age = 40;
end;
$$ language plpgsql;

Create aggregate aggs(integer) (
stype = int,
initcond = '',
sfunc = aggstep);

Select cas(age) from directory;
4

1 回答 1

0

例如,您可以这样做:

首先,创建一个转换函数:

CREATE FUNCTION count40func(bigint, integer) RETURNS bigint
   LANGUAGE sql IMMUTABLE CALLED ON NULL INPUT AS
'SELECT $1 + ($2 IS NOT DISTINCT FROM 40)::integer::bigint';

这是有效的,因为FALSE::integer是 0 并且TRUE::integer是 1。

我使用IS NOT DISTINCT FROM而不是=让它为 NULL 做正确的事情。

然后可以将聚合定义为

CREATE AGGREGATE count40(integer) (
   SFUNC = count40func,
   STYPE = bigint,
   INITCOND = 0
);

然后你可以像这样查询

SELECT count40(age) FROM directory;
于 2018-12-04T20:02:10.853 回答