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