Я пытаюсь создать пользовательские статистические функции , которые используют несколько столбцов в качестве входных данных и выводят один столбец.
Например, для вычисления средневзвешенного значения, мы могли бы использовать два столбца с именами num_samples
и quantity
с таким запросом:
SELECT sum(num_samples * quantity) / sum(num_samples) AS weighted_avg FROM table;
Однако функции, которые я хочу определить, довольно сложные (например, взвешенное стандартное отклонение)и используются много раз.Я хотел бы определить свои собственные агрегатные функции, чтобы их можно было легко использовать в запросах выбора.Например, если бы я хотел найти средневзвешенную и общую сумму, я бы использовал такой запрос:
SELECT weighted_avg(num_samples, quantity), sum(quantity)
Однако из документации видно, что для пользовательских агрегатов допускается только одинпеременная состояния, но в этом примере потребуются две переменные состояния: одна для промежуточного итога quantity
и одна для промежуточного итога num_samples
.
Возможно ли достичь того, что я хочу, с помощью пользовательскогоагрегатные функции или есть лучший способ?Я использую PostgreSQL 8.3.