MySQL, obtener mediana
Jump to navigation
Jump to 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