我需要編寫一個在列上進行聚合操作的存儲函數。讓我們說一箇中位數(但實際上,我想實現許多不同的彙總函數)。理想情況下,我想有類似medBy(col1 col2 col3)
的東西,然後爲每一行返回具有與此相同的col2和col3值的所有行的col1值的中值。這樣,我就不必在整個查詢中執行GROUP BY
,只需在該列中重複一次。如何創建一個MySQL存儲的聚合函數?
這個問題(How to write the quantile aggregate function?)問了一些類似的問題,但得到的答案是查詢而不是存儲函數。
我想知道的是語法是用來指定存儲的函數應該在整列col1
上運行,並且當前行的值爲col2
和col3
。
@djacobson:存儲函數的所有示例我將每個參數視爲單個標量值。也許我應該從頭開始的問題是如何聲明一個聚合存儲函數。所以,假設我只想要一個如下所示的函數:medBy(col1)
並返回參數中指定的列的中位數。每行一次。所以如果我做SELECT col1 my_values, medBy(col1) my_median FROM foo
我會得到一列值(my_values
)和一列,只是第一列的重複中位數(my_median
)。
謝謝。
所以你想要一個聚合函數,可以在多列和多行上操作......不要以爲我見過這種情況。 – GolezTrol
看起來不是那種非基本的東西:只是聚合函數的第一個參數,而按第二個和第三個進行分組或過濾......除非我錯過了某些東西。 –