2014-02-21 41 views
3

就像MIN()AVG()我有時需要一個整數值的最常見的出現值(AKA模式)。這可以得到這樣的:自定義模式()函數可以像MySQL中的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 DB中定義函數,但它們可以像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 

注:有其他類似Select most common value from a field in MySQL SO問題是問如何計算模式。這個問題是關於在函數中完全像AVG()一樣使用它的。

回答

3

不幸的是,你不能用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中。