From: | Peter Eisentraut <peter_e(at)gmx(dot)net> |
---|---|
To: | Tomas Vondra <tomas(dot)vondra(at)2ndquadrant(dot)com>, pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: Combining Aggregates |
Date: | 2015-02-20 20:23:24 |
Message-ID: | 54E797BC.9030702@gmx.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 2/20/15 3:09 PM, Tomas Vondra wrote:
> On 20.2.2015 21:01, Peter Eisentraut wrote:
>> Is there a case where the combining function is different from the
>> transition function, other than for count?
>
> It's different in all the cases when the aggregate state is not
> identical to a single value - for example the usual avg(), sum() and
> stddev() aggregates keep state which is equal to
>
> {count(X), sum(X), sum(X*X)}
>
> The 'combine' function gets two such 'state' values, while transition
> gets 'state' + next value.
That's just because the count is hidden there in an opaque custom
transition function. If, say, we had instead an array of transition
functions {inc, plus, plussq} and we knew that plus and plussq are
associative operators, all we'd need to special case is the count case.
This would avoid a lot of repetitive code for stddev, avg, etc.
(As a bonus, you could use this knowledge to compute count, sum, avg,
and stddev in parallel using only three counters.)
From | Date | Subject | |
---|---|---|---|
Next Message | Tomas Vondra | 2015-02-20 20:32:50 | Re: Combining Aggregates |
Previous Message | Peter Eisentraut | 2015-02-20 20:12:18 | Re: Precedence of standard comparison operators |