Je veux écrire une fonction qui calcule un calcul de moyenne tronquée simple dans MySQL. La fonction sera (évidemment) une fonction agrégée. Je suis nouveau à écrire des fonctions etc dans MySQL, donc je pourrais faire avec de l'aide.Calcul de moyenne tronquée en MySQL
L'algorithme de la moyenne tronquée sera le suivant (pseudo-code):
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
Quelqu'un peut-il aider à la façon d'écrire la fonction ci-dessus correctement, pour une utilisation avec MySQL?
Y at-il un raison spécifique que vous voulez faire cela en tant que fonction, plutôt que comme une requête? De plus, étant donné que vous avez préféré une réponse à une question précédente parce qu'elle utilisait le langage SQL standard, devrez-vous l'utiliser sur plusieurs SGBDR différents (pas seulement MySQL)? –
@MarkBannister J'avais l'intention de travailler avec PG (mon db préféré!), Mais j'ai dû passer par trop de cerceaux pour que PG fonctionne avec PHP (recompiler PHP [ou des questions folles similaires] etc), donc j'ai opté pour mySQL J'ai déjà travaillé avec PHP. La raison pour laquelle je le voulais en tant que fonction est que je veux retourner une moyenne tronquée en tant que colonne dans une requête. Je suppose (si j'avais une solution SQL), je pourrais bidouiller un peu de SQL pour "coller" les valeurs moyennes rognées comme une colonne à mon ensemble de données retourné. –
@MarkBannister: réponse courte à votre question. Une version SQL ANSI serait idéale. Mais comme il m'arrive de travailler avec mySQL, alors si je dois être db-centric, un SQL à saveur MySQL aura la priorité. –