MySQL – Promedio condicional en datos agrupados

publicado por: Anonymous

Soy nuevo en este campo y me quedo corto al tratar de resolver lo que quiero. En una tabla importada desde excel tengo las columnas <grado, docente, curso, Nota1, Nota2, Nota3, Nota4, Nota5> algunos campos pertenecientes a las notas contienen una “X” , mi inquietud va de esta manera, quisiera generar una consulta parecida a lo que resulta de lo siguiente:

SELECT grado, docente, curso, AVG(Nota1), AVG(Nota2), AVG(Nota3), AVG(Nota4), AVG(Nota5) FROM tabla
GROUP BY docente,curso

Sin embargo, el promedio que necesito en cada una de las notas no debe considerar los campos que contienen “X”, mi primera opción fue añadir a la consulta anterior un WHERE Nota1 <> "X" y así con todas las notas pero esto también afecta el promedio de las columnas que no tienen ninguna “X” pues restringe toda la fila.

¿Cómo podría resolver este inconveniente?
Gracias de antemano.

solución

Deberias quitar la condición del where y hacer un IF o NULLIF en cada columna.
Al devolver NULL en caso de que el campo sea X, AVG no lo promediará.

SELECT AVG(NULLIF(Nota1,'X')) FROM tabla
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *