【问题标题】:Custom MODE() function usable like MIN() or AVG() in MySQL自定义 MODE() 函数可用于 MySQL 中的 MIN() 或 AVG()
【发布时间】:2014-02-21 17:18:46
【问题描述】:

就像MIN()AVG() 一样,我有时需要整数值的最常见出现值(也称为模式)。这可以这样获得:

SELECT column, COUNT(*) AS x 
FROM table 
GROUP BY column 
ORDER BY x DESC
LIMIT 1

而且那是相当拗口。我真的很想像这样使用它:MODE()

SELECT AVG(`sTemperature`), MODE(`sSwitch`), MODE(`sDoor`)
FROM `stats`;

有没有办法使上述查询适用于整数? 对于布尔值,我认为ROUND(AVG()) 很好。

可以在 MySQL 数据库中定义函数,但它们可以像 MIN() 或 AVG() 那样在数据集上工作吗?

因为我经常在里面使用它:

INSERT INTO `statsaggregates` (
  `saMeasurements`, `saTemperature`, `saSwitch`, `saDoor`
) SELECT 
  COUNT(*)            as 'saMeasurements',
  AVG(`sTemperature`) as 'saTemperatureAvg',
  MIN(`sTemperature`) as 'saTemperatureMin',
  MAX(`sTemperature`) as 'saTemperatureMax',
  MODE(`sSwitch`)     as 'saSwitch',
  MODE(`sDoor`)       as 'saDoor'
FROM `stats`
WHERE 1

注意:还有其他 SO 问题,例如 Select most common value from a field in MySQL,询问如何计算模式。这个问题是关于在函数中完全像 AVG() 一样使用它。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    不,很遗憾,您不能使用 MySQL UDF“正常”定义的可能性来做到这一点。这样做的唯一方法是定义这样的东西in C/C++ but not SQL

    要使 UDF 机制起作用,函数必须用 C 或 C++ 编写 并且您的操作系统必须支持动态加载。 MySQL源码 发行版包括一个文件 sql/udf_example.c,它定义了五个 UDF 功能。查阅此文件以了解 UDF 调用约定如何工作。 include/mysql_com.h 头文件定义了 UDF 相关的符号和 数据结构,虽然你不需要包含这个头文件 直接地;它包含在 mysql.h 中。

    【讨论】:

      猜你喜欢
      • 2013-04-24
      • 1970-01-01
      • 2010-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多