如何创建 MySQL 存储聚合函数?

Posted

技术标签:

【中文标题】如何创建 MySQL 存储聚合函数?【英文标题】:How to create a MySQL stored aggregate function? 【发布时间】:2012-01-20 20:07:15 【问题描述】:

我需要编写一个对列进行聚合操作的存储函数。假设一个中位数(但实际上,我想实现许多不同的汇总函数)。理想情况下,我想要像medBy( col1 col2 col3 ) 这样的东西,然后对于每一行返回与该行具有相同 col2 和 col3 值的所有行的 col1 值的中值。这样一来,我就不必对整个查询执行GROUP BY,只需在那一列中有一个重复值。

这个问题 (How to write the quantile aggregate function?) 提出了类似的问题,但它得到了查询而不是存储函数的回答。

我想知道的是语法是什么用于指定存储的函数应该对整列col1col2col3的当前行的值进行操作。


@djacobson:我看到的所有存储函数示例都将每个参数视为单个标量值。也许我应该开始的问题是如何声明一个聚合存储函数。所以,假设我只想要一个看起来像这样的函数:medBy(col1),它返回参数中指定的列的中值。每行一次。因此,如果我执行SELECT col1 my_values, medBy(col1) my_median FROM foo,我将得到一列值(my_values)和一列,它只是第一列的重复中位数(my_median)。

谢谢。

【问题讨论】:

所以你想要一个在多列和多行上操作的聚合函数......不要以为我见过。 似乎没有那么离谱:只需聚合函数的第一个参数,同时按第二个和第三个分组或过滤...除非我遗漏了什么。 【参考方案1】:

看来您必须用 C 或 C++ 编写本机共享库才能实现这一目标。 看看http://dev.mysql.com/doc/refman/5.6/en/create-function-udf.html

【讨论】:

是的,创建自定义聚合函数需要UDF。

以上是关于如何创建 MySQL 存储聚合函数?的主要内容,如果未能解决你的问题,请参考以下文章

十MySQL 聚合函数分组查询及过滤分组

26《MySQL 教程》聚合函数(聚合函数 MIN、MAX)

一文搞定MySQL聚合函数

如何在 MySQL 中组合聚合函数?

MySQL数据库函数与MySQL数据库存储过程!

MySQL数据库函数与MySQL数据库存储过程!