在PostgreSQL中汇总

时间:2018-12-04 19:12:08

标签: postgresql user-defined-aggregate

写一个聚合值以计算在列中看到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;

1 个答案:

答案 0 :(得分: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;