集約関数で保存することが必要な中間結果の型は、関数の実行する計算の種類によって異なります。
下記の式を使用して標準偏差を計算する関数STD_DEV(x)があるとします。
この計算式に基づいて、関数では次のデータを記憶する必要があります。
- N
- sum(X2)
- sum(X)
この関数では、必要な中間値に対応する要素を含む、次のようなCの構造体を宣言できます。
typedef struct agr_storage { FLOAT n; FLOAT x_sq; FLOAT x_sum; } AGR_Storage;
次に、関数引数のFNC_Context_t.interim1を参照するAGR_Storageへのポインタを定義することができます。
関数宣言でのパラメータが、次のようになっているとします。
void STD_DEV ( FNC_Phase phase, FNC_Context_t *fctx, FLOAT *x, FLOAT *result, char sqlstate[6] ) { ... }
下記の文により、関数引数FNC_Context_t.interim1を参照するAGR_Storageへのポインタs1を定義します。
AGR_Storage *s1 = fctx->interim1;
このようにしておけば、AGR_Storageへのポインタを使用することにより、記憶域へのアクセスが容易になります。例えば、次のようになります。
s1->n = 0; s1->x_sq = 0; s1->x_sum = 0;