1

Temat: Pobieranie tablicy krotek przy CREATE FUNCTION

Witam,

ostatnio buduję system predykcji giełdowej w oparciu o PostgreSQL i mam problem z tworzeniem funkcji składowanej, która pobierała by listę krotek, a następnie obliczała współczynnik R^2, Phi-square etc, etc... Znalazłem funkcję obliczającą R^2, ale nadal zastanawia mnie problem, w jaki sposób podać funkcji jako parametr listę krotek (wyników np. SELECT wartosc FROM tabela;).
Poniżej przedstawiam kod funkcji, która ma za zadanie obliczać współczynnik R^2, ale nie może, bo pobiera tylko jeden parametr, zamiast całej tablicy.

CREATE OR REPLACE FUNCTION RSQUARE(INTEGER, INTEGER) RETURNS FLOAT
AS
'
BEGIN
  
   RETURN 1-(VARIANCE($1::FLOAT) / VARIANCE($2::FLOAT));

END'
LANGUAGE 'plpgsql';

Był bym wdzięczny, za jakie kolwiek sugestie.

Pozdrawiam.

2

Odp: Pobieranie tablicy krotek przy CREATE FUNCTION

A musisz przekazywać listę krotek? Nie wystarczy przekazywać pojedyncza wartość i wywołać funkcję

select rsquare(,wartosc1,wartosc2) from tabela;

3

Odp: Pobieranie tablicy krotek przy CREATE FUNCTION

Niestety nie, powiedzmy, że chcę liczyć R^2, albo dla nie wtajemniczonych, zwykłą średnią. Muszę pobrać n krotek, zsumować i podzielić przez n. Tylko, że to n, nie zawsze musi mieć tyle ile ma w tym momencie, może być dynamiczne. Jednym parametrem mogę zdziałać wszystko, a tak, to musiał bym przeciążać funkcję, gdybym chciał dodać kolejny parametr, albo inny typ...

4

Odp: Pobieranie tablicy krotek przy CREATE FUNCTION

A nie możesz przekazać całej tablicy jako argument?

5

Odp: Pobieranie tablicy krotek przy CREATE FUNCTION

Właśnie chciał bym, ale chodzi Ci o przekazanie jako "referencję" czy jako wartości? Był bym wdzięczny za przykład.

6

Odp: Pobieranie tablicy krotek przy CREATE FUNCTION

Jeśli możesz wyszukać krotki z poziomu funkcji, to wystarczy ze przekażesz nazwę tablicy i w środku zdefiniujesz sobie pętlę, która będzie przebiegala po select'ie z tej tablicy. Na przykład jeśli tabela nazywa się  'test' i ma kolumnę 'i', to następującą funkcję można użyć do sumowania elementów tej tablicy (oczywiscie 'execute' w pętli może być bardziej skomplikowany)

create or replace function test(varchar) returns integer as 
$$
declare
s integer;
sum integer;
begin
sum:=0;
for s in execute 'select i from '||$1 loop
sum:=sum+s;
end loop;
return sum;
end;
$$
language 'plpgsql'

Czy to coś pomogło?

7

Odp: Pobieranie tablicy krotek przy CREATE FUNCTION

Super, dzięki za pomoc, mała przeróbka Twojego kodu i będzie grało.

P.S. Jak skończę projekcik, to udostępnię na forum system predykcji giełdowej, ciekawe czy się komu przyda.
Serdecznie pozdrawiam smile