Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Duda con consulta

Estas en el tema de Duda con consulta en el foro de Mysql en Foros del Web. Hola amigos de Forosdelweb, vengo con una duda muy grande y buscando ayuda, es la siguiente: Tengo dos tablas, y necesito calcular el promedio de ...
  #1 (permalink)  
Antiguo 19/12/2013, 07:50
Avatar de Waroz  
Fecha de Ingreso: marzo-2013
Ubicación: Debajo de mi cama <.<
Mensajes: 13
Antigüedad: 11 años, 8 meses
Puntos: 0
Duda con consulta

Hola amigos de Forosdelweb, vengo con una duda muy grande y buscando ayuda, es la siguiente:

Tengo dos tablas, y necesito calcular el promedio de notas de un alumno, segun unos criterios.

TABLAS:

alumno
----------
alumno_id
alumno_tipo



notas
---------
asignatura_id
id_alumno
nota


La relacion seria alumno.alumno_id <- notas.id_alumno 1:n

Y necesito calcular el promedio de notas de cada asignatura por tipo de alumnos y si la nota es 0 o 5, no las tome en el promedio (pero si calcule las demas notas).

He intentado usando muchas consultas pero no logro llegar a la que necesito, ayuda porfavor ! :(
  #2 (permalink)  
Antiguo 19/12/2013, 08:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Duda con consulta

Cita:
He intentado usando muchas consultas pero no logro llegar a la que necesito, ayuda porfavor ! :(
Empieza por mostrarnos lo que intentaste.
Partir de allí será más fácil para explicarte.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 19/12/2013, 08:41
Avatar de Waroz  
Fecha de Ingreso: marzo-2013
Ubicación: Debajo de mi cama <.<
Mensajes: 13
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Duda con consulta

Código MySQL:
Ver original
  1. select alumno_tipo, AVG(nota) as PROMEDIO
  2.         from alumno, notas
  3.         where alumno_id=id_alumno and
  4.                 nota <> 0 and
  5.                 nota <> 5
  6.         group by alumno_tipo, id_asignatura
  7.                 order by alumno_tipo

Con eso logro sacar los promedios, pero los que contienen una nota 0 o 5 no me las calcula y se corre todo.
Y si lo uso sin las condiciones de nota, funciona pero me las considera ><.
  #4 (permalink)  
Antiguo 19/12/2013, 08:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Duda con consulta

Bueno, ahora una pregunta final: cuando dices:
Cita:
Y necesito calcular el promedio de notas de cada asignatura por tipo de alumnos y si la nota es 0 o 5, no las tome en el promedio (pero si calcule las demas notas).
¿te refieres a que los promedios de 0 a 5 no los devuelva?
Porque si ese es el caso, simplemente hay que aplicar un HAVING al final...
Código MySQL:
Ver original
  1. SELECT alumno_tipo, AVG(nota) PROMEDIO
  2. FROM alumno A LEFT JOIN notas N ON A.alumno_id = N.id_alumno
  3. GROUP BY alumno_tipo, id_asignatura
  4. ORDER BY alumno_tipo
  5. HAVING PROMEDIO > 5
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 19/12/2013, 08:54
Avatar de Waroz  
Fecha de Ingreso: marzo-2013
Ubicación: Debajo de mi cama <.<
Mensajes: 13
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Duda con consulta

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Bueno, ahora una pregunta final: cuando dices:

¿te refieres a que los promedios de 0 a 5 no los devuelva?
Porque si ese es el caso, simplemente hay que aplicar un HAVING al final...
Código MySQL:
Ver original
  1. SELECT alumno_tipo, AVG(nota) PROMEDIO
  2. FROM alumno A LEFT JOIN notas N ON A.alumno_id = N.id_alumno
  3. GROUP BY alumno_tipo, id_asignatura
  4. ORDER BY alumno_tipo
  5. HAVING PROMEDIO > 5
Las notas 0 o 5, no los tome en cuenta en el promedio, pero igual me calcule las demas notas.
  #6 (permalink)  
Antiguo 19/12/2013, 09:01
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Duda con consulta

La verdad no me quea del todo claro lo que quieres lograr como resultado.
¿Podrías poner una muestra de lo que obtienes, y otra del res,ultado que quieres obtener?
Tal vez viendo un ejemplo real podemos entender mejor.
Lo dicgo porque en principio lo que haces está parcialmente bien. Pero como insistes en que no es correcto y nosotros no tenemos ni tus tablas ni tus datos, sólo podemos suponer.
Postea como es la tabla de datos que obtienes hoy, y otra tabla de cómo debería quedar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 19/12/2013, 09:11
Avatar de Waroz  
Fecha de Ingreso: marzo-2013
Ubicación: Debajo de mi cama <.<
Mensajes: 13
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Duda con consulta

alumno_id | alumno_tipo
1 | 1
2 | 1
3 | 1

asignatura_id | id_alumno | nota
5 | 1 | 0
5 | 2 | 3
5 | 3 | 5

-------------

Deberia darme promedio 3 (no considera las notas 0 o 5 en el calculo del promedio)
  #8 (permalink)  
Antiguo 19/12/2013, 09:24
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Duda con consulta

Esos son los daots puros, pero ¿qué es lo que te está devolviendo tu consulta?
A como se ven esos datos, el promedio, agrupado por alumno debería devovlerte 3 para el alumno 2.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 19/12/2013, 09:34
Avatar de Waroz  
Fecha de Ingreso: marzo-2013
Ubicación: Debajo de mi cama <.<
Mensajes: 13
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Duda con consulta

Si pongo las condiciones para ignorar las notas 0 y 5, no me devuelve nada.
  #10 (permalink)  
Antiguo 19/12/2013, 09:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Duda con consulta

Postea lo que muestra esto:
Código SQL:
Ver original
  1. SELECT A.alumno_tipo, AVG(N.nota) PROMEDIO
  2. FROM alumno A INNER JOIN notas N ON A.alumno_id = N.id_alumno
  3. WHERE N.nota NOT IN(0, 5)
  4. GROUP BY alumno_tipo, id_asignatura
  5. ORDER BY alumno_tipo;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 19/12/2013, 10:39
Avatar de Waroz  
Fecha de Ingreso: marzo-2013
Ubicación: Debajo de mi cama <.<
Mensajes: 13
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Duda con consulta

Bueeeehhh, revisando bien me meti a los registros de la base de datos

(El que di aca era solo un ejemplo, porque la que estoy usando tiene unos 15000 registros), como 15 columnas, etc.

Al final el problema era que unos registros del mismo tipo tenian notas 5, entonces al imprimir los datos salian todos corridos.

Asi que simplemente ordene bien como imprimia las cosas y listo D=

Todo un dia perdido por nada xD

PD: La primera consulta que puse era la que servia D=

Etiquetas: tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:21.