Quiero escribir una función que calcula un cálculo simple de medias recortadas en MySQL. La función será (obviamente) una función agregada. Soy nuevo en la escritura de funciones, etc. en MySQL, así que podría hacerlo con algo de ayuda.Cálculo de medias recortadas en MySQL
El algoritmo de la media recortada será el siguiente (pseudocódigo):
CREATE AGGREGATE FUNCTION trimmed_mean(elements DOUBLE[], trim_size INTEGER)
RETURNS DOUBLE
BEGIN
-- determine number of elements
-- ensure that number of elements is greater than 2 * trim_size else return error
-- order elements in ASC order
-- chop off smallest trim_size elements and largest trim_size elements
-- calculate arithmetic average of the remaining elements
-- return arithmetic average
END
¿Alguien puede ayudar con la forma de escribir correctamente la función anterior, para su uso con MySQL?
¿Hay una razón específica por la que desea hacer esto como una función, en lugar de como una consulta? Además, dado que prefirió una respuesta a una pregunta anterior porque usó SQL estándar, ¿tendrá que ser capaz de utilizar esto en varios RDBMS diferentes (es decir, no solo MySQL)? –
@MarkBannister ¡Tenía la intención de trabajar con PG (mi DB preferido!), Pero tuve que saltar demasiados aros para hacer que PG trabajara con PHP (recompilando PHP [o locos similares)], así que opté por mySQL, que Ya tengo trabajo con PHP. La razón por la que lo quería como una función es que quiero devolver una media recortada como una columna en una consulta. Supongo (si tuviera una solución SQL), podría hackear juntos algunos SQL para 'pegar' los valores medios recortados como una columna en mi conjunto de datos devuelto. –
@MarkBannister: respuesta breve a su pregunta. Una versión ANSI SQL sería ideal. Pero dado que estoy trabajando con mySQL, entonces si tengo __have__ ser db-céntrico, un SQL con sabor MySQL tendrá prioridad. –