Как создать хранимую агрегатную функцию MySQL? - PullRequest
1 голос
/ 21 января 2012

Мне нужно написать хранимую функцию, которая выполняет статистическую операцию со столбцом. Скажем, медиана (но на самом деле, я хочу реализовать много различных функций суммирования). В идеале я хотел бы иметь что-то вроде medBy( col1 col2 col3 ), которое затем для каждой строки возвращает медиану значений col1 всех строк, которые имеют те же значения col2 и col3, что и эта. Таким образом, мне не нужно было бы делать GROUP BY для всего запроса, просто иметь повторяющееся значение в этом одном столбце.

Этот вопрос ( Как написать агрегатную функцию квантиля? ) задавал нечто похожее, но на него отвечал запрос, а не хранимая функция.

Я хотел бы знать, что такое синтаксис для указания того, что хранимая функция должна работать со всем столбцом col1 и значениями текущей строки col2 и col3.


@ djacobson: все примеры хранимых функций, которые я вижу, рассматривают каждый параметр как одно скалярное значение. Возможно, вопрос, с которого я должен начать, это как вообще объявлять хранимую функцию. Итак, допустим, я просто хочу функцию, которая выглядит следующим образом: medBy(col1) и возвращает медиану столбца, указанного в аргументе. Один раз для каждого ряда. Поэтому, если я сделаю SELECT col1 my_values, medBy(col1) my_median FROM foo, я получу столбец значений (my_values) и столбец, который является просто повторяющейся медианой первого столбца (my_median).

Спасибо.

1 Ответ

2 голосов
/ 22 февраля 2012

Похоже, вам нужно написать собственную разделяемую библиотеку на C или C ++, чтобы осуществить это.Взгляните на http://dev.mysql.com/doc/refman/5.6/en/create-function-udf.html

...