Вие показвате средно изчисление, но искате първата текстова стойност, която виждате?
По-долу е описано как да направите това. Ако приемем, че искате първата ненулева стойност, т.е. Ако не, ще трябва да следите дали вече имате стойност или не.
Акумулаторната функция е написана като plpgsql и sql - plpgsql ви позволява да използвате имена на променливи и да ги дебъгвате. Той просто използва COALESCE срещу предишната натрупана стойност и новата стойност и връща първата ненулева стойност. Така че - веднага щом имате не-нула в акумулатора, всичко останало се игнорира.
Може също така да обмислите прозоречната функция "first_value" за подобни неща, ако използвате модерна (8.4+) версия на PostgreSQL.
http://www.postgresql.org/docs/9.1/static /functions-window.html
HTH
BEGIN;
CREATE FUNCTION remember_first(acc text, newval text) RETURNS text AS $$
BEGIN
RAISE NOTICE '% vs % = %', acc, newval, COALESCE(acc, newval);
RETURN COALESCE(acc, newval);
END;
$$ LANGUAGE plpgsql IMMUTABLE;
CREATE FUNCTION remember_first_sql(text,text) RETURNS text AS $$
SELECT COALESCE($1, $2);
$$ LANGUAGE SQL IMMUTABLE;
-- No "initcond" means we start out with null
--
CREATE AGGREGATE first(text) (
sfunc = remember_first,
stype = text
);
CREATE TEMP TABLE tt (t text);
INSERT INTO tt VALUES ('abc'),('def'),('ghi');
SELECT first(t) FROM tt;
ROLLBACK;