Ver Mensaje Individual
  #14 (permalink)  
Antiguo 15/01/2018, 05:19
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Designar Puestos estudiantes segun sus notas

Cita:
Iniciado por karenlorenadg Ver Mensaje
Necesito el numero de orden del promedio general por cada estudiante y asi darle su lugar en el curso
Eso es sólo necesita una query básica con uso de la función AVG() y agrupar (GROUP BY). Lo único singular es que para obtener el orden numérico del resultado deberás utilizar variables de usuario.
O sea, imaginando los nombres de tablas y columnas:

Código SQL:
Ver original
  1. SELECT AL.alumno_id, AL.nombre, AVG(EX.nota) Promedio
  2. FROM alumno AL LEFT JOIN examen EX ON AL.alumno_id = EX.alumno_id
  3. GROUP BY AL.alumno_id

Esto devuelve los promedios de cada uno, sin distincion de cursos o asignaturas.

Código SQL:
Ver original
  1. SELECT AL.alumno_id, AL.nombre, AVG(EX.nota) Promedio
  2. FROM alumno AL LEFT JOIN examen EX ON AL.alumno_id = EX.alumno_id
  3. GROUP BY AL.alumno_id
  4. ORDER BY Promedio DESC, nombre ASC

Así quedarían ordenados de mayor a menor los promedios y los nombres (en caso que hubiese promedios iguales entre dos o más alumnois).

El único truco consiste en la variable de usuario:

Código SQL:
Ver original
  1. SELECT (@orden:=@orden+1) Orden, AL.alumno_id, AL.nombre, AVG(EX.nota) Promedio
  2. FROM alumno AL LEFT JOIN examen EX ON AL.alumno_id = EX.alumno_id JOIN (SELECT @orden:=0) posicion
  3. GROUP BY AL.alumno_id
  4. ORDER BY Promedio DESC, nombre ASC

Nota: Estoy poniendo LEFT JOIN para tomar en cuenta la posibilidad de que haya alumnos que no tengan exámenes realizados.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)