Вы можете сделать это, например, так:
Сначала создайте функцию перехода:
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;