Obtener el promedio de los 10 mejores estudiantes de cada escuela
Tenemos un distrito escolar con 38 escuelas primarias. Los niños tomaron una prueba. Los promedios para las escuelas están ampliamente dispersos, pero quiero comparar los promedios de SOLO LOS 10 mejores estudiantes de cada escuela.
Requisito: use solo tablas temporales.
He hecho esto de una manera muy intensiva en trabajo y propensa a errores de la siguiente manera.
(sch_code = por ejemplo, 9043; - schabbrev = por ejemplo, "Carter"; - totpct_stu = por ejemplo, 61.3)
DROP TEMPORARY TABLE IF EXISTS avg_top10 ;
CREATE TEMPORARY TABLE avg_top10
( sch_code VARCHAR(4),
schabbrev VARCHAR(75),
totpct_stu DECIMAL(5,1)
);
INSERT
INTO avg_top10
SELECT sch_code
, schabbrev
, totpct_stu
FROM test_table
WHERE sch_code IN ('5489')
ORDER
BY totpct_stu DESC
LIMIT 10;
-- I do that last query for EVERY school, so the total
-- length of the code is well in excess of 300 lines.
-- Then, finally...
SELECT schabbrev, ROUND( AVG( totpct_stu ), 1 ) AS top10
FROM avg_top10
GROUP
BY schabbrev
ORDER
BY top10 ;
-- OUTPUT:
-----------------------------------
schabbrev avg_top10
---------- ---------
Goulding 75.4
Garth 77.7
Sperhead 81.4
Oak_P 83.7
Spring 84.9
-- etc...
Pregunta: Entonces esto funciona, pero ¿no hay una mejor manera de hacerlo?
¡Gracias!
PD: Parece tarea, pero esto es, bueno ... real.