PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Agrégats PostgreSQL avec plusieurs paramètres

J'espère que cet exemple vous aidera. Vous avez besoin d'une fonction qui prend (accumulateur, arguments d'agrégation) et renvoie la nouvelle valeur de l'accumulateur. Jouez avec le code ci-dessous et cela devrait vous donner une idée de la façon dont tout cela s'emboîte.

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;      

Cela devrait vous donner quelque chose comme :

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