Re: Calculating product from rows - (aggregate product )

From: Allan Kamau <allank(at)sanbi(dot)ac(dot)za>
To: Postgres-General <pgsql-general(at)postgresql(dot)org>
Subject: Re: Calculating product from rows - (aggregate product )
Date: 2009-05-04 08:30:35
Message-ID: 49FEA7AB.9030902@sanbi.ac.za
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

At the moment I have two probable solutions, the first makes use of
cursors and requires looping though each record, the other a
not-so-elegant solution (and may be unfavourable for large datasets)
makes use of arrays and the EXECUTE command (in plpgsql).

The second solution is as follows.

DROP table imaginary;

CREATE temp table imaginary(id INTEGER NOT NULL, some_field FLOAT
NULL,primary key(id));

INSERT INTO imaginary(id,some_field)VALUES(1,0.333);INSERT INTO
imaginary(id,some_field)VALUES(2,0.667);INSERT INTO
imaginary(id,some_field)VALUES(3,0.4);INSERT INTO
imaginary(id,some_field)VALUES(4,null);

SELECT array_to_string(ARRAY(SELECT a.some_field FROM imaginary a),'*');

--within plpgsql execute the following

EXECUTE 'SELECT '||SELECT array_to_string(ARRAY(SELECT a.some_field FROM
imaginary a),'*') INTO _my_aggregated_product;

Allan.


Allan Kamau wrote:
> 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.
>
>
> Allan.
>
>

In response to

Browse pgsql-general by date

  From Date Subject
Next Message A. Kretschmer 2009-05-04 08:42:01 Re: Calculating product from rows - (aggregate product )
Previous Message Vladimir N. Indik 2009-05-04 08:14:57 Re: could not bind IPv4 socket