MySQL - Promedio condicional en datos agrupados

 
Vista:
sin imagen de perfil

Promedio condicional en datos agrupados

Publicado por Gonzo (2 intervenciones) el 15/08/2017 01:09:06
Hola a todos!

Soy nuevo en programación y me quedo corto al tratar de resolver lo que quiero. En una tabla importada de excel tengo las columnas grado, docente, curso, Nota1,Nota2,...,Nota5, algunos registros pertenecientes a las notas tienen como valor "X", mi consulta va de esta manera, quisiera generar una vista parecida a lo que resulta de la consulta:

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

Sin embargo, el promedio que necesito en cada una de las notas no debe considerar el valor "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".

¿Cómo podría resolver este inconveniente?
Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Promedio condicional en datos agrupados

Publicado por leonardo_josue (414 intervenciones) el 16/08/2017 16:05:19
Hola Gonzo:

No me queda claro cuál es el problema... ¿podrías poner algunos datos de ejemplo de tu tabla y a partir de esos datos decirnos qué es lo que quieres obtener? de esta forma será más factible que podamos ayudarte.

Postea también la estructura completa de tu tabla, para conocer los tipos de datos de los campos con los que quieres trabajar, ya que por lo que entiendo, puedes necesitar hacer algún tipo de conversión.

Saludos
Leo,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 7
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Promedio condicional en datos agrupados

Publicado por Conrado (1 intervención) el 16/08/2017 16:15:54
Hola, si algun campo Nota contiene una X debería pinchar la consulta sql.
No entiendo muy bien cuando decis que existe una X en el campo Nota...
No se si el motor que usas permite un varchar para ejecutar el AVG
Pero en el caso que exista esa posibilidad, podrías evaluar Nota dentro del AVG
Para el motor sql Oracle existe el "decode", que te permite evaluar el contenido y cambiarlo si fuera necesario:

ej:

select avg( decode( nota, 'X', '0', nota) ) from table

Esto dice que las filas con nota= X le va a poner un cero, si no es una X deja el valor contenido en nota.
Pero bueno, hay que verlo de forma mas amplia por ahi

NOTA: En mysql if(nota='X','0',nota)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Promedio condicional en datos agrupados

Publicado por Gonzo (2 intervenciones) el 16/08/2017 18:12:33
Hola a todos, gracias y disculpen el no haber planteado debídamente el problema, aún así la solución a esto va por la sugerencia de @Conrado.

La tabla se importó desde una hoja excel y los datos que pertenecen a las columnas de notas además de contener valores numéricos también en algunos casos contienen como valor una "X" la cuál significa que dicha nota no existe y que en el promedio de cada una de estas columnas no debe considerarse. En el inconveniernte la función AVG si bien solo sumaba los números, los dividía entre la cantidad total de datos incluyendo "X" haciendo que el promedio requerido se reduzca.

Finalmente, para que la función AVG no tome en cuenta las "X"s estas debían volverse NULL y para ello la función debe quedar así:

AVG(NULLIF(Nota1,'X'))

Una vez más gracias por su tiempo y perdonen el poco cuidado en mi planteamiento. Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar