MySQL, obtener mediana

From Wiki de Caballero
Revision as of 14:06, 3 December 2017 by Felipe (talk | contribs) (Created page with "==Solución== Suponiendo que queremos la mediana de nota (''grade'') de una tabla grades podemos ejecutar el siguiente query. <source lang="mysql"> SET @rowindex := -1; SEL...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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