mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-02-17 19:30:00 +08:00
Improve user-defined-aggregates documentation.
On closer inspection, that two-element initcond value seems to have been a little white lie to avoid explaining the full behavior of float8_accum. But if people are going to expect the examples to be exactly correct, I suppose we'd better explain. Per comment from Thom Brown.
This commit is contained in:
parent
03f957fe1d
commit
5b6c27a607
@ -70,7 +70,7 @@ SELECT sum(a) FROM test_complex;
|
||||
expects <function>sum</function> to behave that way. We can do this simply by
|
||||
omitting the <literal>initcond</literal> phrase, so that the initial state
|
||||
condition is null. Ordinarily this would mean that the <literal>sfunc</literal>
|
||||
would need to check for a null state-condition input, but for
|
||||
would need to check for a null state-condition input. But for
|
||||
<function>sum</function> and some other simple aggregates like
|
||||
<function>max</> and <function>min</>,
|
||||
it is sufficient to insert the first nonnull input value into
|
||||
@ -95,8 +95,8 @@ SELECT sum(a) FROM test_complex;
|
||||
It requires
|
||||
two pieces of running state: the sum of the inputs and the count
|
||||
of the number of inputs. The final result is obtained by dividing
|
||||
these quantities. Average is typically implemented by using a
|
||||
two-element array as the state value. For example,
|
||||
these quantities. Average is typically implemented by using an
|
||||
array as the state value. For example,
|
||||
the built-in implementation of <function>avg(float8)</function>
|
||||
looks like:
|
||||
|
||||
@ -106,9 +106,14 @@ CREATE AGGREGATE avg (float8)
|
||||
sfunc = float8_accum,
|
||||
stype = float8[],
|
||||
finalfunc = float8_avg,
|
||||
initcond = '{0,0,0}'
|
||||
initcond = '{0,0}'
|
||||
);
|
||||
</programlisting>
|
||||
|
||||
(<function>float8_accum</> requires a three-element array, not just
|
||||
two elements, because it accumulates the sum of squares as well as
|
||||
the sum and count of the inputs. This is so that it can be used for
|
||||
some other aggregates besides <function>avg</>.)
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
Loading…
Reference in New Issue
Block a user