列に対して集計操作を行うストアド関数を作成する必要があります。中央値としましょう (しかし、実際には、実装したいさまざまな集計関数がたくさんあります)。medBy( col1 col2 col3 )
理想的には、各行に対して、これと同じ col2 および col3 値を持つすべての行の col1 値の中央値を返すようなものが必要です。そうすればGROUP BY
、クエリ全体を処理する必要はなく、その 1 つの列に繰り返し値を設定するだけです。
この質問 (分位点集計関数の書き方は? ) も同様のことを尋ねましたが、ストアド関数ではなくクエリで回答されました。
私が知りたいのは、ストアド関数が列全体col1
と現在の行のcol2
andの値に対して動作することを指定するための構文ですcol3
。
@djacobson:私が見るストアド関数のすべての例は、各パラメーターを単一のスカラー値として扱います。おそらく、私が最初に取り組むべき問題は、集計ストアド関数を宣言する方法です。では、次のような関数が必要だとしましょう:medBy(col1)
引数で指定された列の中央値を返します。行ごとに 1 回。したがってSELECT col1 my_values, medBy(col1) my_median FROM foo
、そうすると、値の列 ( my_values
) と、最初の列の繰り返しの中央値だけである列 ( my_median
) が得られます。
ありがとう。