2012-01-20 24 views
1

我需要編寫一個在列上進行聚合操作的存儲函數。讓我們說一箇中位數(但實際上,我想實現許多不同的彙總函數)。理想情況下,我想有類似medBy(col1 col2 col3)的東西,然後爲每一行返回具有與此相同的col2和col3值的所有行的col1值的中值。這樣,我就不必在整個查詢中執行GROUP BY,只需在該列中重複一次。如何創建一個MySQL存儲的聚合函數?

這個問題(How to write the quantile aggregate function?)問了一些類似的問題,但得到的答案是查詢而不是存儲函數。

我想知道的是語法是用來指定存儲的函數應該在整列col1上運行,並且當前行的值爲col2col3


@djacobson:存儲函數的所有示例我將每個參數視爲單個標量值。也許我應該從頭開始的問題是如何聲明一個聚合存儲函數。所以,假設我只想要一個如下所示的函數:medBy(col1)並返回參數中指定的列的中位數。每行一次。所以如果我做SELECT col1 my_values, medBy(col1) my_median FROM foo我會得到一列值(my_values)和一列,只是第一列的重複中位數(my_median)。

謝謝。

+0

所以你想要一個聚合函數,可以在多列和多行上操作......不要以爲我見過這種情況。 – GolezTrol

+1

看起來不是那種非基本的東西:只是聚合函數的第一個參數,而按第二個和第三個進行分組或過濾......除非我錯過了某些東西。 –

回答