Cómo calcular la mediana en MySQL

Gustavo du Mortier 11 diciembre 2023
  1. La manera más precisa de calcular la mediana en MySQL
  2. Use UDFs (User-Defined Functions) para añadir funcionalidad a MySQL
Cómo calcular la mediana en MySQL

En este tutorial, mostraremos un par de maneras de calcular eficientemente la mediana de una serie de números en MySQL.

MySQL no tiene una función incorporada para calcular la mediana estadística de una serie de números. Por eso, si necesitas calcular una mediana, debes hacerlo usando el código personalizado.

La mediana es el elemento medio de la serie de números que estás analizando. Detectar este elemento puede ser un proceso lento si trabajas con una muestra grande y no lo haces de manera eficiente. El proceso también puede ser complicado en algunas situaciones. Por ejemplo, algunos algoritmos pueden funcionar con series de números impares pero no con series pares, o viceversa.

La manera más precisa de calcular la mediana en MySQL

Supongamos que tienes una tabla dataset con una columna MyNumber de tipo flotante, y necesitas obtener la mediana de la serie de datos de MyNumber. La forma más precisa de calcular la mediana con un algoritmo que funcione en todos los casos sería usar el siguiente 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;

Si la tabla tiene un gran número de filas, necesitarás un índice en la columna MyNumber y asegúrate de que ese índice se utiliza para filtrar y ordenar la declaración para que funcione bien.

Use UDFs (User-Defined Functions) para añadir funcionalidad a MySQL

Las funciones matemáticas y estadísticas son muy comunes, y no se debe reinventar la rueda si se necesita utilizar una función como la mediana. Por lo tanto, puedes coger una función definida por el usuario bien probada que haga el trabajo.

En este sitio, encontrarás un montón de UDFs que puedes usar gratuitamente para añadir funciones estadísticas a MySQL. Uno de esos UDF es la función median. Tiene un parámetro de entrada y otro de salida, ambos de tipo REAL. El parámetro de entrada es la columna que contiene el conjunto de números para calcular la mediana, y el parámetro de salida es la mediana calculada.

Después de descargar el código fuente, se añade el UDF usando este comando:

CREATE AGGREGATE FUNCTION median RETURNS REAL SONAME 'udf_median.so';

Luego, puede usar la función dentro de una instrucción SELECT, así:

SELECT MEDIAN(MyNumber) FROM dataset