Subject Re: [firebird-support] Re: Aggregate UDF?
Author Michael Ludwig
Svein Erling schrieb am 25.06.2010 um 13:50 (-0000):

> Nothing is like trying, and to me, PenWins suggestions seems OK -
> except that he forgot the square root. At least, the following
> produced a sensible result for my first (and only) test:
>
> with CTE(MySum) as
> (select avg(MyField*MyField)-(avg(MyField)*avg(MyField))
> from TEST_TABLE)
> select sqrt(MySum)
> from CTE

Not doubting or questioning the mathematical soundness of the formula,
but I'm getting different results for your stored procedure and your
CTE.

CREATE TABLE T( A INTEGER );

Insert 0, 1, 2, 3 and so on through 10. The esult in both cases is
3.162277660168380. So far, so good. Now add 30 and commit.

INSERT INTO T VALUES (30); COMMIT;

WITH CTE(MySum) AS (
SELECT
AVG( a * a )
- ( AVG( a ) * AVG( a ) )
FROM t
)
SELECT SQRT(MySum) FROM CTE;

SQRT
=======================
7.615773105863909


select * from p_stddev('a', 't');

STDDEV
=======================
7.544313531837517

--
Michael Ludwig