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

标签 mysql aggregate-functions stored-functions

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

这个问题 ( 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)。

谢谢。

最佳答案

看来您必须用 C 或 C++ 编写 native 共享库才能完成此操作。 看看http://dev.mysql.com/doc/refman/5.6/en/create-function-udf.html

关于mysql - 如何创建 MySQL 存储聚合函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8947232/

相关文章:

elasticsearch - Elasticsearch 每小时获得一条记录

sql-server - 包含在函数中的 Select 语句不能将数据返回给 client_New

function - 类似宏的函数作为 postgresql 中的过滤器

mysql - '' 的语法错误?

Mysql什么字段类型用于混合了完整日期和部分日期的日期

日期之间的 SQL/Oracle 聚合桶

具有不同主键值的 MYSQL 查询重复?

mysql - SQL 仅选择列上具有最大值的行

mysql - 如何在共享主机上使用 C# 的 mySql DB?

mysql - 如何在 MySQL 中正确使用 CASE..WHEN