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