Calcular a mediana no MySQL
- A forma mais exacta de calcular a mediana no MySQL
- Use UDFs (funções definidas pelo usuário) para adicionar funcionalidade ao MySQL
Neste tutorial, mostraremos algumas formas de calcular eficazmente a mediana de uma série de números no MySQL.
O MySQL não tem uma função integrada para calcular a mediana estatística de uma série de números. É por isso que, se precisar de calcular uma mediana, deve fazê-lo utilizando o código personalizado.
A mediana é o elemento médio da série de números que se está a analisar. A detecção deste elemento pode ser um processo lento se trabalhar com uma amostra grande e não o fizer de forma eficiente. O processo também pode ser complicado em algumas situações. Por exemplo, alguns algoritmos podem funcionar em conjuntos de números ímpares, mas não em conjuntos pares, ou vice-versa.
A forma mais exacta de calcular a mediana no MySQL
Suponha que tem uma tabela dataset
com uma coluna MyNumber
do tipo float, e precisa de obter a mediana da série de dados do MyNumber
. A forma mais precisa de calcular a mediana com um algoritmo que funcione em todos os casos seria utilizar o seguinte script:
SELECT AVG(mid_vals) AS 'median' FROM (
SELECT tab1.MyNumber AS 'mid_vals' FROM
(
SELECT @row:=@row+1 AS 'row', a.MyNumber
FROM dataset AS a, (SELECT @row:=0) AS r
ORDER BY a.MyNumber
) AS tab1,
(
SELECT COUNT(*) as 'count'
FROM dataset x
) AS tab2
WHERE tab1.row >= tab2.count/2 and tab1.row <= ((tab2.count/2) +1)) AS tab3;
Se a tabela tiver uma grande contagem de linhas, será necessário um índice na coluna MyNumber
e certificar-se de que o índice é utilizado para filtrar e ordenar para que a declaração tenha um bom desempenho.
Use UDFs (funções definidas pelo usuário) para adicionar funcionalidade ao MySQL
A matemática e as funções estatísticas são muito comuns, e não se deve reinventar a roda se for necessário utilizar uma função como a mediana. Por conseguinte, pode agarrar uma função bem testada e definida pelo utilizador que faz o trabalho.
Em este site, encontrará um monte de UDFs que poderá utilizar gratuitamente para adicionar funcionalidades estatísticas ao MySQL. Um desses UDFs é a função median
. Tem um parâmetro de entrada e um de saída, ambos do tipo REAL
. O parâmetro de entrada é a coluna que contém o array de números para calcular a mediana, e o parâmetro de saída é a mediana calculada.
Depois de descarregar o código fonte, adiciona-se o UDF utilizando este comando:
CREATE AGGREGATE FUNCTION median RETURNS REAL SONAME 'udf_median.so';
Depois, pode utilizar a função dentro de uma declaração SELECT
, como esta:
SELECT MEDIAN(MyNumber) FROM dataset