MySQL, obtener mediana
Jump to navigation
Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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