Calcular a mediana no MySQL

  1. A forma mais exacta de calcular a mediana no MySQL
  2. 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