sql >> Databáze >  >> RDS >> PostgreSQL

Agregáty PostgreSQL s více parametry

Snad tento příklad pomůže. Potřebujete funkci, která vezme (akumulátor, agregační argumenty) a vrátí novou hodnotu akumulátoru. Pohrajte si s kódem níže a měl by vám dát pocit, jak to všechno do sebe zapadá.

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;      

To by vám mělo dát něco jako:

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


  1. Vnitřní spojení s podobnou klauzulí

  2. Nemohu spustit bundler, stále se zobrazuje chyba

  3. Rychlé nasazení aplikace Visual Studio 2010 s databází SQL

  4. Seskupování dat do různých tabulek na základě minimálního data události