PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

PostgreSQL агрегати с множество параметри

Надяваме се, че този пример ще помогне. Имате нужда от функция, която взема (акумулатор, агрегатни аргументи) и връща новата стойност на акумулатора. Поиграйте си с кода по-долу и това трябва да ви даде представа как всичко си пасва.

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;      

Това трябва да ви даде нещо като:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Кръстосана таблица с голям или неопределен брой категории

  2. Клаузи за грижа:Всичко за SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY и LIMIT

  3. Добавяне на dict обект към postgresql

  4. Множество индекси срещу единичен индекс на множество колони в postgresql

  5. Групово вмъкване на postgres, където клеймото има нулево ограничение, зададено чрез секвализиране