Search Postgresql Archives

Re: Calculating product from rows - (aggregate product ) [solution found, thanks Andreas]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On Mon, May 4, 2009 at 10:42 AM, A. Kretschmer <andreas.kretschmer@xxxxxxxxxxxxxx> wrote:
> In response to Allan Kamau :
>> Hi
>>
>> I would like to calculate a product of a field's values of a relation,
>> this function may multiply each value and give the result as a single
>> float number.
>>
>> For example:
>>
>>
>> CREATE table imaginary(id INTEGER NOT NULL, some_field FLOAT
>> NULL,primary key(id));
>>
>> INSERT INTO imarginary(1,0.333);INSERT INTO imarginary(2,0.667);INSERT
>> INTO imarginary(3,0.4);
>>
>>
>> SELECT prod(some_field) FROM imarginary;
>>
>>
>> would give 0.0888444 (which is 0.333*0.667*0.4)
>>
>>
>> Is there an already existing function that does this.
>
> No, you need a own aggregate function, but it is easy:
>
> test=# CREATE FUNCTION multiply_aggregate(float,float) RETURNS float AS
> ' select $1 * $2; ' language sql IMMUTABLE STRICT; CREATE AGGREGATE
> multiply (basetype=float, sfunc=multiply_aggregate, stype=float,
> initcond=1 ) ;
> CREATE FUNCTION
> CREATE AGGREGATE
> test=*# create table float_test(a float);
> CREATE TABLE
> test=*# copy float_test from stdin;
> Enter data to be copied followed by a newline.
> End with a backslash and a period on a line by itself.
>>> 0.333
>>> 0.4
>>> 0.8
>>> \.
> test=*# select multiply(a) from float_test;
>  multiply
> ----------
>  0.10656
> (1 row)
>
>
>
> Regards, Andreas
> --
> Andreas Kretschmer
> Kontakt:  Heynitz: 035242/47150,   D1: 0160/7141639 (mehr: -> Header)
> GnuPG-ID:   0x3FFF606C, privat 0x7F4584DA   http://wwwkeys.de.pgp.net
>
> --
> Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general
>


Thanks Andreas, your solution works quite well, much appreciated.

Allan


--
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux