PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL-Aggregate mit mehreren Parametern

Hoffentlich hilft dieses Beispiel. Sie benötigen eine Funktion, die (Akkumulator, Aggregatargumente) übernimmt und den neuen Akkumulatorwert zurückgibt. Spielen Sie mit dem unten stehenden Code herum, und das sollte Ihnen ein Gefühl dafür geben, wie alles zusammenpasst.

BEGIN;

CREATE FUNCTION sum_product_fn(int,int,int) RETURNS int AS $$
    SELECT $1 + ($2 * $3);
$$ LANGUAGE SQL;           

CREATE AGGREGATE sum_product(int, int) (
    sfunc = sum_product_fn,
    stype = int, 
    initcond = 0
);

SELECT 
    sum(i) AS one,     
    sum_product(i, 2) AS double,
    sum_product(i,3) AS triple
FROM generate_series(1,3) i;

ROLLBACK;      

Das sollte Ihnen so etwas geben:

 one | double | triple 
-----+--------+--------
   6 |     12 |     18