Desidero scrivere una funzione che calcoli un semplice calcolo medio ritagliato in MySQL. La funzione sarà (ovviamente) una funzione aggregata. Sono nuovo a scrivere funzioni ecc in MySQL quindi potrebbe fare con qualche aiuto.Calcolo medio ridotto in MySQL
L'algoritmo della media troncata sarà il seguente (pseudocodice):
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
Chiunque può aiutare con il modo di scrivere la funzione di cui sopra in modo corretto, per l'uso con MySQL?
Esiste un motivo specifico per cui vuoi farlo come una funzione piuttosto che come una query? Inoltre, dato che hai preferito una risposta a una domanda precedente perché usava l'SQL standard, dovresti essere in grado di usarlo su più RDBMS diversi (cioè non solo su MySQL)? –
@MarkBannister intendevo lavorare con PG (il mio db preferito!), Ma ho dovuto saltare troppi cerchi per far funzionare il PG con PHP (ricompilando PHP [o simili pazzi peti] ecc., Quindi ho optato per mySQL che Ho già lavorato con PHP. Il motivo per cui l'ho voluto come funzione è che voglio restituire una media ritagliata come una colonna in una query. Suppongo (se avessi una soluzione SQL), potrei hackerare alcuni SQL per "incollare" i valori medi ritagliati come una colonna al mio set di dati restituito. –
@MarkBannister: risposta breve alla tua domanda. Una versione ANSI SQL sarebbe l'ideale. Ma dal momento che sto lavorando con mySQL, quindi se devo essere db-centric, un SQL con SQL MySQL avrà la precedenza. –