आप एक माध्य गणना दिखा रहे हैं, लेकिन आप चाहते हैं कि पहला टेक्स्ट मान आपको दिखाई दे?
नीचे यह कैसे करना है। मान लें कि आप पहला गैर-शून्य मान चाहते हैं, अर्थात। यदि नहीं, तो आपको यह ट्रैक करना होगा कि आपके पास पहले से कोई मान है या नहीं।
संचायक फ़ंक्शन को plpgsql और sql के रूप में लिखा जाता है - plpgsql एक आपको चर नामों का उपयोग करने देता है और इसे डीबग भी करता है। यह केवल पिछले संचित मूल्य और नए मान के विरुद्ध COALESCE का उपयोग करता है और पहला गैर-शून्य लौटाता है। तो - जैसे ही आपके पास एक्युमुलेटर में एक नॉन-नल होता है, बाकी सब कुछ अनदेखा कर दिया जाता है।
यदि आप PostgreSQL के आधुनिक (8.4+) संस्करण पर हैं, तो आप इस प्रकार की चीज़ के लिए "first_value" विंडो फ़ंक्शन पर भी विचार कर सकते हैं।
http://www.postgresql.org/docs/9.1/static /functions-window.html
एचटीएच
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;