MySQL, obtener mediana

From Wiki de Flat Estrategia Digital
Jump to: navigation, search

Solución

Suponiendo que queremos la mediana de nota (grade) de una tabla grades podemos ejecutar el siguiente query.

SET @rowindex := -1;
 
SELECT
   AVG(g.grade)
FROM
   (SELECT @rowindex:=@rowindex + 1 AS rowindex,
           grades.grade AS grade
    FROM grades
    ORDER BY grades.grade) AS g
WHERE
g.rowindex IN (FLOOR(@rowindex / 2) , CEIL(@rowindex / 2));

Explicación

El siguiente query obtiene la lista de grade (nota) ordenada por nota y con un indice asociado a cada nota. En indice debe empezar en -1.

SET @rowindex := -1;

SELECT @rowindex:=@rowindex + 1 AS rowindex,
    grades.grade AS grade
FROM grades
ORDER BY grades.grade

La sección final filtra del total de indices los de la mitad, si son impares va a ser uno solo, si son pares con dos. Uno arriba de la mitad y otro abajo.

(...)
g.rowindex IN (FLOOR(@rowindex / 2) , CEIL(@rowindex / 2));

Finalmente se obtiene el promedio entre las dos (en caso de que sea una cantidad par) notas que están en la mitad o el promedio entre una sola (en caso de que sea una cantidad impar).


Source

Source: How to calculate median value in MySQL using a simple SQL query

Facebook Comments